generated: '2026-07-15' method: generated source: openapi/altruistiq-openapi.yml 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: 44 by_action_class: acting: 29 connected: 15 by_consequence: write: 4 read: 15 safety-critical: 25 human_in_the_loop_required: 25 operations: - path: /api/public/v1/oauth2/token method: post operationId: getOauth2Token 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: /api/public/v1/datasource/{dataSourceId}/upload method: get operationId: startMultipartUpload x-agentic-access: action-class: connected consequence: read subject: optional token: max-ttl: 3600 audit: none - path: /api/public/v1/datasource/{dataSourceId}/upload method: post operationId: uploadFile 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: /api/public/v1/datasource/{dataSourceId}/upload/{uploadId}/file/{fileId}/complete method: post operationId: completeFileUpload 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: /api/public/v1/export method: post operationId: createExport 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: /api/public/v1/export/{exportId} method: get operationId: getDownloadUrls x-agentic-access: action-class: connected consequence: read subject: optional token: max-ttl: 3600 audit: none - path: /api/public/v1/products method: post operationId: PublicProductController.createProduct 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/public/v1/products method: get operationId: PublicProductsController.bulkGetProducts x-agentic-access: action-class: connected consequence: read subject: optional token: max-ttl: 3600 audit: none - path: /api/public/v1/products method: patch operationId: PublicProductsController.bulkUpdateProducts 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/public/v1/products method: delete operationId: PublicProductsController.bulkDeleteProducts 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/public/v1/products/{id} method: get operationId: PublicProductController.getProduct x-agentic-access: action-class: connected consequence: read subject: optional token: max-ttl: 3600 audit: none - path: /api/public/v1/products/{id} method: patch operationId: PublicProductController.updateProduct 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/public/v1/products/{id} method: delete operationId: PublicProductController.deleteProduct 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/public/v1/products/bulk method: post operationId: PublicProductsController.bulkCreateProducts 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/public/v1/product-structures method: post operationId: PublicStructureController.createSingleStructure 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/public/v1/product-structures/{id} method: get operationId: PublicStructureController.getSingleStructure x-agentic-access: action-class: connected consequence: read subject: optional token: max-ttl: 3600 audit: none - path: /api/public/v1/product-structures/{id} method: patch operationId: PublicStructureController.updateSingleStructure 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/public/v1/product-structures/{id} method: delete operationId: PublicStructureController.deleteSingleStructure 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/public/v1/products/{productId}/structures method: post operationId: PublicStructuresController.bulkCreateStructures 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/public/v1/products/{productId}/structures method: get operationId: PublicStructuresController.bulkGetStructures x-agentic-access: action-class: connected consequence: read subject: optional token: max-ttl: 3600 audit: none - path: /api/public/v1/products/{productId}/structures method: patch operationId: PublicStructuresController.bulkUpdateStructures 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/public/v1/products/{productId}/structures method: delete operationId: PublicStructuresController.bulkDeleteStructures 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/public/v1/product-structure-inputs method: post operationId: PublicStructureInputController.createSingleStructureInput 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/public/v1/product-structure-inputs/{id} method: get operationId: PublicStructureInputController.getSingleStructureInput x-agentic-access: action-class: connected consequence: read subject: optional token: max-ttl: 3600 audit: none - path: /api/public/v1/product-structure-inputs/{id} method: patch operationId: PublicStructureInputController.updateSingleStructureInput 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/public/v1/product-structure-inputs/{id} method: delete operationId: PublicStructureInputController.deleteSingleStructureInput 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/public/v1/product-structures/{structureId}/inputs method: post operationId: PublicStructureInputsController.bulkCreateStructureInputs 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/public/v1/product-structures/{structureId}/inputs method: get operationId: PublicStructureInputsController.bulkGetStructureInputs x-agentic-access: action-class: connected consequence: read subject: optional token: max-ttl: 3600 audit: none - path: /api/public/v1/product-structures/{structureId}/inputs method: patch operationId: PublicStructureInputsController.bulkUpdateStructureInputs 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/public/v1/product-structures/{structureId}/inputs method: delete operationId: PublicStructureInputsController.bulkDeleteStructureInputs 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/public/v1/product-structure-inputs/bulk method: post operationId: PublicStructureInputsController.bulkCreateInputs 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/public/v1/facilities/ method: get operationId: FacilitiesPublicController.getFacilities x-agentic-access: action-class: connected consequence: read subject: optional token: max-ttl: 3600 audit: none - path: /api/public/v1/facilities/{facilityId} method: get operationId: FacilitiesPublicController.getFacility x-agentic-access: action-class: connected consequence: read subject: optional token: max-ttl: 3600 audit: none - path: /api/public/v1/facilities/{facilityId} method: delete operationId: FacilitiesPublicController.deleteFacility 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/public/v1/facilities/{facilityId}/versions/{versionId} method: get operationId: FacilitiesPublicController.getFacilityVersion x-agentic-access: action-class: connected consequence: read subject: optional token: max-ttl: 3600 audit: none - path: /api/public/v1/facilities/{facilityId}/versions/{versionId} method: delete operationId: FacilitiesPublicController.deleteFacilityVersion 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/public/v1/facilities/{facilityId}/versions/{versionId} method: patch operationId: FacilitiesPublicController.updateFacilityVersion 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/public/v1/facilities/bulk method: post operationId: FacilitiesPublicController.bulkInsertFacilities 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/public/v1/facilities/{facilityId}/persistent method: patch operationId: FacilitiesPublicController.updateFacilityPersistent 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/public/v1/facilities/{facilityId}/versions method: post operationId: FacilitiesPublicController.createFacilityVersion 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/public/v1/facilities/types method: get operationId: FacilitiesPublicController.getFacilityTypes x-agentic-access: action-class: connected consequence: read subject: optional token: max-ttl: 3600 audit: none - path: /api/public/v1/location/countries method: get operationId: LocationController.getCountries x-agentic-access: action-class: connected consequence: read subject: optional token: max-ttl: 3600 audit: none - path: /api/public/v1/location/countries/{countryCode}/subdivisions method: get operationId: LocationController.getCountrySubdivisions x-agentic-access: action-class: connected consequence: read subject: optional token: max-ttl: 3600 audit: none - path: /api/public/v1/organization/ method: get operationId: OrganizationPublicController.getOrganization x-agentic-access: action-class: connected consequence: read subject: optional token: max-ttl: 3600 audit: none