generated: '2026-07-19' method: generated source: openapi/howler-consumer-portal-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: 67 by_action_class: connected: 30 acting: 37 by_consequence: read: 30 write: 30 safety-critical: 2 physical: 5 human_in_the_loop_required: 2 operations: - path: /oauth/authorize method: get operationId: getConsumerOAuthAuthorize x-agentic-access: action-class: connected consequence: read subject: optional token: max-ttl: 3600 audit: none - path: /oauth/token method: post operationId: createConsumerOAuthToken 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: /oauth/revoke method: post operationId: destroyConsumerOAuthToken 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: /oauth/ott method: post operationId: createConsumerOAuthOneTimeToken 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: /login method: post operationId: loginUser 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: /email_otp/generate method: post operationId: generateEmailOtp 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: /email_otp/login method: post operationId: loginWithEmailOtp 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: /auth/google/web method: get operationId: getConsumerGoogleAuth x-agentic-access: action-class: connected consequence: read subject: optional token: max-ttl: 3600 audit: none - path: /auth/facebook/web method: get operationId: getConsumerFacebookAuth x-agentic-access: action-class: connected consequence: read subject: optional token: max-ttl: 3600 audit: none - path: /auth/google_oauth2/callback method: get operationId: getConsumerGoogleAuthCallback x-agentic-access: action-class: connected consequence: read subject: optional token: max-ttl: 3600 audit: none - path: /auth/facebook/callback method: get operationId: getConsumerFacebookAuthCallback x-agentic-access: action-class: connected consequence: read subject: optional token: max-ttl: 3600 audit: none - path: /auth/failure method: get operationId: getConsumerAuthFailure x-agentic-access: action-class: connected consequence: read subject: optional token: max-ttl: 3600 audit: none - path: /topupables method: get operationId: getConsumerTopupables x-agentic-access: action-class: connected consequence: read subject: optional token: max-ttl: 3600 audit: none - path: /tickets method: get operationId: getConsumerTickets x-agentic-access: action-class: connected consequence: read subject: optional token: max-ttl: 3600 audit: none - path: /tickets/{ticket_id}/update_data_capture method: put operationId: updateConsumerTicketDataCapture 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: /tickets/{ticket_id}/update_personalised_name method: put operationId: updateConsumerTicketPersonalisedName 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: /tickets/{ticket_id}/update_owner method: put operationId: updateConsumerTicketOwner 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: /tickets/{ticket_id}/assign method: put operationId: updateConsumerTicketAssign 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: /tickets/{ticket_id}/assign/web method: get operationId: assignConsumerTicketWeb x-agentic-access: action-class: connected consequence: read subject: optional token: max-ttl: 3600 audit: none - path: /tickets/{ticket_id}/assign/web method: put operationId: updateConsumerTicketAssignWeb 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: /tickets/{ticket_id}/transfer method: post operationId: updateConsumerTicketTransferCreate 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: /tickets/{ticket_id}/transfer/{transfer_order_id}/confirmation method: put operationId: updateConsumerTicketTransferConfirm 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: /tickets/{ticket_id}/top_up method: post operationId: updateConsumerticketTopup 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: /tickets/{ticket_id}/top_up/{top_up_order_id}/amounts method: put operationId: updateConsumerTicketAmounts 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: /tickets/{ticket_id}/top_up/{top_up_order_id}/payments method: get operationId: editConsumerTicketPayment x-agentic-access: action-class: connected consequence: read subject: optional token: max-ttl: 3600 audit: none - path: /tickets/{ticket_id}/top_up/{top_up_order_id}/completes method: get operationId: getConsumerTicketComplete x-agentic-access: action-class: connected consequence: read subject: optional token: max-ttl: 3600 audit: none - path: /cashless_tags method: get operationId: getConsumerCashlessTags x-agentic-access: action-class: connected consequence: read subject: optional token: max-ttl: 3600 audit: none - path: /cashless_tags/{cashless_tag_uid}/transactions method: get operationId: getConsumerCashlessTagTransactions x-agentic-access: action-class: connected consequence: read subject: optional token: max-ttl: 3600 audit: none - path: /cashless_tags/{cashless_tag_uid}/top_up method: post operationId: updateConsumerCashlessTagTopup 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: /cashless_tags/{cashless_tag_uid}/top_up/{top_up_order_id}/amounts method: put operationId: updateConsumerCashlessTagAmounts 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: /cashless_tags/{cashless_tag_uid}/top_up/{top_up_order_id}/payments method: get operationId: editConsumerCashlessTagPayment x-agentic-access: action-class: connected consequence: read subject: optional token: max-ttl: 3600 audit: none - path: /cashless_tags/{cashless_tag_uid}/top_up/{top_up_order_id}/completes method: get operationId: getConsumerCashlessTagComplete x-agentic-access: action-class: connected consequence: read subject: optional token: max-ttl: 3600 audit: none - path: /cashless_tags/{cashless_tag_uid}/cashout method: post operationId: updateConsumerCashoutEvent 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: /cashless_tags/{cashless_tag_uid}/cashout/{cashless_tag_pairing_id}/amounts method: put operationId: updateConsumerCashoutAmounts 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: /cashless_tags/{cashless_tag_uid}/cashout/{cashless_tag_pairing_id}/confirmation method: put operationId: updateConsumerCashoutConfirm 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: /user method: delete operationId: requestUserDeletion 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: /user method: get operationId: getConsumerUser x-agentic-access: action-class: connected consequence: read subject: optional token: max-ttl: 3600 audit: none - path: /user method: put operationId: updateConsumerUser 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: /bank_account/edit method: get operationId: editConsumerBankAccount x-agentic-access: action-class: connected consequence: read subject: optional token: max-ttl: 3600 audit: none - path: /bank_account method: get operationId: showConsumerBankAccount x-agentic-access: action-class: connected consequence: read subject: optional token: max-ttl: 3600 audit: none - path: /bank_account method: post operationId: createConsumerBankAccount 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: /bank_account method: put operationId: updateConsumerBankAccount 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: /bank_account/refresh_form method: post operationId: refreshConsumerBankAccountForm 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: /artists/{id}/favourite method: post operationId: favouriteArtist 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: /artists/{id}/favourite method: delete operationId: unfavouriteArtist 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: /cashless_tags/{cashless_tag_uid}/cashout/{cashless_tag_pairing_id}/web/amounts method: get operationId: showCashlessTagCashoutAmountWeb x-agentic-access: action-class: connected consequence: read subject: optional token: max-ttl: 3600 audit: none - path: /cashless_tags/{cashless_tag_uid}/cashout/{cashless_tag_pairing_id}/web/amounts method: put operationId: updateCashlessTagCashoutAmountWeb 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: /events/{event_id} method: get operationId: getConsumerEvent x-agentic-access: action-class: connected consequence: read subject: optional token: max-ttl: 3600 audit: none - path: /jwt/ott method: post operationId: createConsumerJWTOneTimeToken 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: /tickets/{id} method: get operationId: getConsumerTicket x-agentic-access: action-class: connected consequence: read subject: optional token: max-ttl: 3600 audit: none - path: /cashless_tags/{cashless_tag_uid}/top_up/{top_up_order_id}/successful_payment method: get operationId: updateConsumerCashlessTagPayment x-agentic-access: action-class: connected consequence: read subject: optional token: max-ttl: 3600 audit: none - path: /cashless_tags/{cashless_tag_uid}/top_up/{top_up_order_id}/pending_successful_payment method: get operationId: pendingSuccessConsumerCashlessTagPayment x-agentic-access: action-class: connected consequence: read subject: optional token: max-ttl: 3600 audit: none - path: /cashless_tags/{cashless_tag_uid}/top_up/{top_up_order_id}/failed_payment method: get operationId: failedConsumerCashlessTagPayment x-agentic-access: action-class: connected consequence: read subject: optional token: max-ttl: 3600 audit: none - path: /tickets/{ticket_id}/top_up/{top_up_order_id}/successful_payment method: get operationId: customSchemaRedirectForSafari x-agentic-access: action-class: connected consequence: read subject: optional token: max-ttl: 3600 audit: none - path: /tickets/{ticket_id}/top_up/{top_up_order_id}/pending_successful_payment method: get operationId: pendingSuccessConsumerTicketPayment x-agentic-access: action-class: connected consequence: read subject: optional token: max-ttl: 3600 audit: none - path: /tickets/{ticket_id}/top_up/{top_up_order_id}/failed_payment method: get operationId: failedConsumerTicketPayment x-agentic-access: action-class: connected consequence: read subject: optional token: max-ttl: 3600 audit: none - path: /top_up method: post operationId: updateConsumerTopup 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: /events/{event_id}/performance/{performance_id} method: post operationId: addPerformanceToTimeTable 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: /events/{event_id}/performance/{performance_id} method: delete operationId: removePerformanceFromTimeTable 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: /events/{event_id}/user/setup method: get operationId: updateConsumerUserIsSetup x-agentic-access: action-class: connected consequence: read subject: optional token: max-ttl: 3600 audit: none - path: /user/resend_confirmation method: post operationId: resendUserConfirmation 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: /tickets/{ticket_id}/update_data_capture/web method: get operationId: editConsumerTicketDataCaptureWeb x-agentic-access: action-class: connected consequence: read subject: optional token: max-ttl: 3600 audit: none - path: /tickets/{ticket_id}/update_data_capture/web method: put operationId: updateConsumerTicketDataCaptureWeb 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: /user/web method: get operationId: editConsumerUserWeb x-agentic-access: action-class: connected consequence: read subject: optional token: max-ttl: 3600 audit: none - path: /user/web method: put operationId: updateConsumerUserWeb 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: /password/reset method: post operationId: resetPassword 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: /register method: post operationId: registerUser 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