generated: '2026-08-02' method: generated source: openapi/1komma5-offer-tool-openapi-original.json description: Recommended x-agentic-access execution contracts, classified from the live Offer Tool OpenAPI. A governance starting point for exposing this API to AI agents — review and bind audience per deployment. See research/curity/agentic-governance/. x-note: 'Re-derived with word-boundary keyword matching. The shared 0-working/derive-agentic-access.py does a naive substring match, and "control" is a substring of "Controller" — which appears in every operationId this NestJS API emits — so its first pass classified all 40 write operations as safety-critical. That is wrong: this is a sales quoting API with no device-control surface. The token "controller" is excluded here.' summary: operations: 73 by_action_class: connected: 33 acting: 40 by_consequence: read: 33 write: 39 physical: 1 human_in_the_loop_required: 0 operations: - path: / method: get operationId: IndexController_index x-agentic-access: action-class: connected consequence: read subject: optional token: max-ttl: 3600 audit: none - path: /_health method: get operationId: HealthController_getHealthStatus x-agentic-access: action-class: connected consequence: read subject: optional token: max-ttl: 3600 audit: none - path: /api/v1/customers/{customerId}/sites method: post operationId: CreateCustomerSiteController_handle_v1 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/v1/tenant method: get operationId: TenantController_getTenants_v1 x-agentic-access: action-class: connected consequence: read subject: optional token: max-ttl: 3600 audit: none - path: /api/v1/tenant/switch method: post operationId: TenantController_switchActiveTenant_v1 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/v1/auth0/user/exists method: post operationId: Auth0UserController_userExistsByEmail_v1 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/v1/users/me method: put operationId: UpdateUserController_handle_v1 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/v1/users/me method: get operationId: GetUserProfileController_handle_v1 x-agentic-access: action-class: connected consequence: read subject: optional token: max-ttl: 3600 audit: none - path: /api/v1/users method: get operationId: GetAllUsersController_getUsers_v1 x-agentic-access: action-class: connected consequence: read subject: optional token: max-ttl: 3600 audit: none - path: /api/v1/users/me/profile-picture method: post operationId: UserProfilePhotoController_handle_v1 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/v1/users/me/profile-picture method: delete operationId: UserProfilePhotoController_delete_v1 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/v1/users/sales-persons method: get operationId: GetSalesUsersController_getSalesUsers_v1 x-agentic-access: action-class: connected consequence: read subject: optional token: max-ttl: 3600 audit: none - path: /api/v1/payment-options method: get operationId: GetAllPaymentOptionsController_handle_v1 x-agentic-access: action-class: connected consequence: read subject: optional token: max-ttl: 3600 audit: none - path: /api/v1/customers/{id} method: put operationId: UpdateCustomerController_handle_v1 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/v1/customers/{id} method: get operationId: GetCustomerController_get_v1 x-agentic-access: action-class: connected consequence: read subject: optional token: max-ttl: 3600 audit: none - path: /api/v1/customers/{id} method: delete operationId: DeleteCustomerController_handle_v1 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/v1/customers method: get operationId: GetAllCustomersController_handle_v1 x-agentic-access: action-class: connected consequence: read subject: optional token: max-ttl: 3600 audit: none - path: /api/v1/customers method: post operationId: CreateCustomerController_handle_v1 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/v1/customers/{id}/details method: get operationId: GetCustomerDetailsController_handle_v1 x-agentic-access: action-class: connected consequence: read subject: optional token: max-ttl: 3600 audit: none - path: /api/v1/admin/countries method: get operationId: GetCountriesController_getCountries_v1 x-agentic-access: action-class: connected consequence: read subject: optional token: max-ttl: 3600 audit: none - path: /api/v1/product method: get operationId: ProductGetAllController_handle_v1 x-agentic-access: action-class: connected consequence: read subject: optional token: max-ttl: 3600 audit: none - path: /api/v1/product/{id} method: get operationId: GetProductController_get_v1 x-agentic-access: action-class: connected consequence: read subject: optional token: max-ttl: 3600 audit: none - path: /api/v1/concepts-public method: get operationId: GetConceptsController_getAll_v1 x-agentic-access: action-class: connected consequence: read subject: optional token: max-ttl: 3600 audit: none - path: /api/v1/effective-price/de/check-simulation-data method: post operationId: EffectivePriceController_checkSimulationDataDe_v1 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/v1/effective-price/de method: post operationId: EffectivePriceController_getEffectivePriceDe_v1 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/v1/crm/reject-offer/{crmOfferId} method: patch operationId: RejectOfferController_handle_v1 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/v1/crm/deals/{dealId} method: get operationId: GetDealController_getDeal_v1 x-agentic-access: action-class: connected consequence: read subject: optional token: max-ttl: 3600 audit: none - path: /api/v1/configs/{id} method: get operationId: GetConfigController_get_v1 x-agentic-access: action-class: connected consequence: read subject: optional token: max-ttl: 3600 audit: none - path: /api/v1/configs/{id}/send-offer method: post operationId: SendOfferController_sendOffer_v1 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: /api/v1/configs/{configId}/pdf method: post operationId: PdfController_generatePdf_v1 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/v1/admin/audit-logs method: get operationId: GetAuditLogsController_getAuditLogs_v1 x-agentic-access: action-class: connected consequence: read subject: optional token: max-ttl: 3600 audit: none - path: /api/v1/admin/users method: get operationId: GetAdminUsersController_getAdminUsers_v1 x-agentic-access: action-class: connected consequence: read subject: optional token: max-ttl: 3600 audit: none - path: /api/v1/admin/users method: post operationId: CreateAdminUserController_createAdminUser_v1 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/v1/admin/users/me method: get operationId: GetCurrentAdminUserController_getCurrentAdminUser_v1 x-agentic-access: action-class: connected consequence: read subject: optional token: max-ttl: 3600 audit: none - path: /api/v1/admin/users/me/branches method: get operationId: GetMyBranchesController_getMyBranches_v1 x-agentic-access: action-class: connected consequence: read subject: optional token: max-ttl: 3600 audit: none - path: /api/v1/admin/users/assignable-branches method: get operationId: GetAssignableBranchesController_getAssignableBranches_v1 x-agentic-access: action-class: connected consequence: read subject: optional token: max-ttl: 3600 audit: none - path: /api/v1/admin/users/{id} method: get operationId: GetAdminUserController_getAdminUser_v1 x-agentic-access: action-class: connected consequence: read subject: optional token: max-ttl: 3600 audit: none - path: /api/v1/admin/users/{id} method: patch operationId: UpdateAdminUserController_updateAdminUser_v1 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/v1/admin/users/{id}/resend-invitation method: post operationId: ResendInvitationController_resendInvitation_v1 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/v1/admin/branches method: get operationId: GetAdminBranchesController_getAdminBranches_v1 x-agentic-access: action-class: connected consequence: read subject: optional token: max-ttl: 3600 audit: none - path: /api/v1/admin/branches method: post operationId: CreateAdminBranchController_createAdminBranch_v1 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/v1/admin/branches/{id} method: get operationId: GetAdminBranchController_getAdminBranch_v1 x-agentic-access: action-class: connected consequence: read subject: optional token: max-ttl: 3600 audit: none - path: /api/v1/admin/branches/{id} method: patch operationId: UpdateAdminBranchController_updateAdminBranch_v1 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/v1/admin/concepts method: get operationId: GetAdminConceptsController_getAdminConcepts_v1 x-agentic-access: action-class: connected consequence: read subject: optional token: max-ttl: 3600 audit: none - path: /api/v1/admin/concepts method: post operationId: CreateAdminConceptController_createAdminConcept_v1 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/v1/admin/concepts/{id} method: get operationId: GetAdminConceptController_getAdminConcept_v1 x-agentic-access: action-class: connected consequence: read subject: optional token: max-ttl: 3600 audit: none - path: /api/v1/admin/concepts/{id} method: patch operationId: UpdateAdminConceptController_updateAdminConcept_v1 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/v1/admin/products method: get operationId: GetAdminProductsController_getAdminProducts_v1 x-agentic-access: action-class: connected consequence: read subject: optional token: max-ttl: 3600 audit: none - path: /api/v1/admin/products method: post operationId: CreateAdminProductController_createAdminProduct_v1 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/v1/admin/products/{id} method: get operationId: GetAdminProductController_getProduct_v1 x-agentic-access: action-class: connected consequence: read subject: optional token: max-ttl: 3600 audit: none - path: /api/v1/admin/products/{id} method: patch operationId: UpdateAdminProductController_updateAdminProduct_v1 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/v1/admin/pricebook method: get operationId: GetAdminPricebookController_getAdminPricebook_v1 x-agentic-access: action-class: connected consequence: read subject: optional token: max-ttl: 3600 audit: none - path: /api/v1/admin/categories method: get operationId: GetAdminCategoriesController_getCategories_v1 x-agentic-access: action-class: connected consequence: read subject: optional token: max-ttl: 3600 audit: none - path: /api/v1/admin/brands method: get operationId: GetAdminCategoriesController_getBrands_v1 x-agentic-access: action-class: connected consequence: read subject: optional token: max-ttl: 3600 audit: none - path: /api/v1/admin/roles method: get operationId: GetAssignableRolesController_getAssignableRoles_v1 x-agentic-access: action-class: connected consequence: read subject: optional token: max-ttl: 3600 audit: none - path: /api/v1/admin/maintenance/backfill-config-hashes method: post operationId: BackfillConfigHashesController_backfillConfigHashes_v1 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/v1/admin/megasearch method: get operationId: MegasearchController_search_v1 x-agentic-access: action-class: connected consequence: read subject: optional token: max-ttl: 3600 audit: none - path: /api/migration-frozen-state/configs/{configId}/migrate-all method: post operationId: ConfigMigrationOrchestratorController_migrateAll 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/v1/migration-frozen-state/configs/{configId}/config-products method: post operationId: ConfigProductsMigrationController_migrateConfigProducts_v1 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/v1/migration-frozen-state/configs/{configId}/config-documents method: post operationId: ConfigDocumentsMigrationController_migrateConfigDocuments_v1 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/v1/migration-frozen-state/configs/{configId}/config-table method: post operationId: ConfigTableMigrationController_migrateConfigTable_v1 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/v1/migration-frozen-state/configs/{configId}/config-customer method: post operationId: ConfigCustomerMigrationController_migrateConfigCustomer_v1 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/v1/migration-frozen-state/configs/{configId}/config-consumption-table method: post operationId: ConfigConsumptionMigrationController_migrateConfigConsumption_v1 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/v1/migration-frozen-state/configs/{configId}/config-margins method: post operationId: ConfigMarginsMigrationController_migrateConfigMargins_v1 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/v1/migration-frozen-state/configs/{configId}/config-calculation-legacy-table method: post operationId: ConfigCalculationLegacyMigrationController_migrateConfigCalculationLegacy_v1 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/v1/migration-frozen-state/configs/{configId}/config-calculation-table method: post operationId: ConfigCalculationMigrationController_migrateConfigCalculation_v1 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/v1/migration-frozen-state/configs/{configId}/config-metrics method: post operationId: ConfigMetricsMigrationController_migrateConfigMetrics_v1 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/v1/migration-frozen-state/configs/{configId}/config-self-sufficiency method: post operationId: ConfigSelfSufficiencyMigrationController_migrateConfigSelfSufficiency_v1 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/v1/migration-frozen-state/configs/{configId}/config-market-components method: post operationId: ConfigMarketComponentsMigrationController_migrateConfigMarketComponents_v1 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/v1/migration-frozen-state/configs/{configId}/config-effective-prices method: post operationId: ConfigEffectivePricesMigrationController_migrateConfigEffectivePrices_v1 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/v1/test/pubsub method: post operationId: TestPubsubController_publishTestPing_v1 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/v1/configs/{id}/lookup-energy-service-data method: post operationId: RefreshConfigEnergySiteInfoController_refresh_v1 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/v1/sites/{id}/lookup-energy-service-data method: post operationId: QueueSiteEnergySiteInfoRefreshController_queue_v1 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