generated: '2026-07-15' method: generated source: openapi/ahasend-openapi-v2.yaml, openapi/ahasend-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: connected: 19 acting: 25 by_consequence: read: 19 physical: 25 human_in_the_loop_required: 0 operations: - path: /v2/ping method: get operationId: ping x-agentic-access: action-class: connected consequence: read subject: optional token: max-ttl: 3600 audit: none - path: /v2/accounts/{account_id}/api-keys method: get operationId: getAPIKeys x-agentic-access: action-class: connected consequence: read subject: optional scope: - api-keys:read token: max-ttl: 3600 audit: none - path: /v2/accounts/{account_id}/api-keys method: post operationId: createAPIKey x-agentic-access: action-class: acting consequence: physical subject: required scope: - api-keys:write audience: null token: max-ttl: 300 exchange: true purpose-required: true escalation: human-in-the-loop: conditional triggers: - abnormal - high-value audit: required - path: /v2/accounts/{account_id}/api-keys/{key_id} method: get operationId: getAPIKey x-agentic-access: action-class: connected consequence: read subject: optional scope: - api-keys:read token: max-ttl: 3600 audit: none - path: /v2/accounts/{account_id}/api-keys/{key_id} method: put operationId: updateAPIKey x-agentic-access: action-class: acting consequence: physical subject: required scope: - api-keys:write audience: null token: max-ttl: 300 exchange: true purpose-required: true escalation: human-in-the-loop: conditional triggers: - abnormal - high-value audit: required - path: /v2/accounts/{account_id}/api-keys/{key_id} method: delete operationId: deleteAPIKey x-agentic-access: action-class: acting consequence: physical subject: required scope: - api-keys:delete audience: null token: max-ttl: 300 exchange: true purpose-required: true escalation: human-in-the-loop: conditional triggers: - abnormal - high-value audit: required - path: /v2/accounts/{account_id}/domains method: get operationId: getDomains x-agentic-access: action-class: connected consequence: read subject: optional scope: - domains:read token: max-ttl: 3600 audit: none - path: /v2/accounts/{account_id}/domains method: post operationId: createDomain x-agentic-access: action-class: acting consequence: physical subject: required scope: - domains:write audience: null token: max-ttl: 300 exchange: true purpose-required: true escalation: human-in-the-loop: conditional triggers: - abnormal - high-value audit: required - path: /v2/accounts/{account_id}/domains/{domain} method: get operationId: getDomain x-agentic-access: action-class: connected consequence: read subject: optional scope: - domains:read token: max-ttl: 3600 audit: none - path: /v2/accounts/{account_id}/domains/{domain} method: put operationId: updateDomain x-agentic-access: action-class: acting consequence: physical subject: required scope: - domains:write audience: null token: max-ttl: 300 exchange: true purpose-required: true escalation: human-in-the-loop: conditional triggers: - abnormal - high-value audit: required - path: /v2/accounts/{account_id}/domains/{domain} method: delete operationId: deleteDomain x-agentic-access: action-class: acting consequence: physical subject: required scope: - domains:delete:all - domains:delete:{domain} audience: null token: max-ttl: 300 exchange: true purpose-required: true escalation: human-in-the-loop: conditional triggers: - abnormal - high-value audit: required - path: /v2/accounts/{account_id}/domains/{domain}/check-dns method: post operationId: checkDomainDNS x-agentic-access: action-class: acting consequence: physical subject: required scope: - domains:write audience: null token: max-ttl: 300 exchange: true purpose-required: true escalation: human-in-the-loop: conditional triggers: - abnormal - high-value audit: required - path: /v2/accounts/{account_id}/messages method: get operationId: getMessages x-agentic-access: action-class: connected consequence: read subject: optional scope: - messages:read:all - messages:read:{domain} token: max-ttl: 3600 audit: none - path: /v2/accounts/{account_id}/messages method: post operationId: createMessage x-agentic-access: action-class: acting consequence: physical subject: required scope: - messages:send:all - messages:send:{domain} audience: null token: max-ttl: 300 exchange: true purpose-required: true escalation: human-in-the-loop: conditional triggers: - abnormal - high-value audit: required - path: /v2/accounts/{account_id}/messages/conversation method: post operationId: createConversationMessage x-agentic-access: action-class: acting consequence: physical subject: required scope: - messages:send:all - messages:send:{domain} audience: null token: max-ttl: 300 exchange: true purpose-required: true escalation: human-in-the-loop: conditional triggers: - abnormal - high-value audit: required - path: /v2/accounts/{account_id}/messages/{message_id} method: get operationId: getMessage x-agentic-access: action-class: connected consequence: read subject: optional scope: - messages:read:all - messages:read:{domain} token: max-ttl: 3600 audit: none - path: /v2/accounts/{account_id}/messages/{message_id}/cancel method: delete operationId: cancelMessage x-agentic-access: action-class: acting consequence: physical subject: required scope: - messages:cancel:all - messages:cancel:{domain} audience: null token: max-ttl: 300 exchange: true purpose-required: true escalation: human-in-the-loop: conditional triggers: - abnormal - high-value audit: required - path: /v2/accounts/{account_id} method: get operationId: getAccount x-agentic-access: action-class: connected consequence: read subject: optional scope: - accounts:read token: max-ttl: 3600 audit: none - path: /v2/accounts/{account_id} method: put operationId: updateAccount x-agentic-access: action-class: acting consequence: physical subject: required scope: - accounts:write audience: null token: max-ttl: 300 exchange: true purpose-required: true escalation: human-in-the-loop: conditional triggers: - abnormal - high-value audit: required - path: /v2/accounts/{account_id}/members method: get operationId: getAccountMembers x-agentic-access: action-class: connected consequence: read subject: optional scope: - accounts:members:read token: max-ttl: 3600 audit: none - path: /v2/accounts/{account_id}/members method: post operationId: addAccountMember x-agentic-access: action-class: acting consequence: physical subject: required scope: - accounts:members:add audience: null token: max-ttl: 300 exchange: true purpose-required: true escalation: human-in-the-loop: conditional triggers: - abnormal - high-value audit: required - path: /v2/accounts/{account_id}/members/{user_id} method: delete operationId: removeAccountMember x-agentic-access: action-class: acting consequence: physical subject: required scope: - accounts:members:remove audience: null token: max-ttl: 300 exchange: true purpose-required: true escalation: human-in-the-loop: conditional triggers: - abnormal - high-value audit: required - path: /v2/accounts/{account_id}/suppressions method: get operationId: getSuppressions x-agentic-access: action-class: connected consequence: read subject: optional scope: - suppressions:read token: max-ttl: 3600 audit: none - path: /v2/accounts/{account_id}/suppressions method: post operationId: createSuppression x-agentic-access: action-class: acting consequence: physical subject: required scope: - suppressions:write audience: null token: max-ttl: 300 exchange: true purpose-required: true escalation: human-in-the-loop: conditional triggers: - abnormal - high-value audit: required - path: /v2/accounts/{account_id}/suppressions method: delete operationId: deleteSuppression x-agentic-access: action-class: acting consequence: physical subject: required scope: - suppressions:delete audience: null token: max-ttl: 300 exchange: true purpose-required: true escalation: human-in-the-loop: conditional triggers: - abnormal - high-value audit: required - path: /v2/accounts/{account_id}/suppressions/all method: delete operationId: deleteAllSuppressions x-agentic-access: action-class: acting consequence: physical subject: required scope: - suppressions:wipe audience: null token: max-ttl: 300 exchange: true purpose-required: true escalation: human-in-the-loop: conditional triggers: - abnormal - high-value audit: required - path: /v2/accounts/{account_id}/routes method: get operationId: getRoutes x-agentic-access: action-class: connected consequence: read subject: optional scope: - routes:read:all - routes:read:{domain} token: max-ttl: 3600 audit: none - path: /v2/accounts/{account_id}/routes method: post operationId: createRoute x-agentic-access: action-class: acting consequence: physical subject: required scope: - routes:write:all - routes:write:{domain} audience: null token: max-ttl: 300 exchange: true purpose-required: true escalation: human-in-the-loop: conditional triggers: - abnormal - high-value audit: required - path: /v2/accounts/{account_id}/routes/{route_id} method: get operationId: getRoute x-agentic-access: action-class: connected consequence: read subject: optional scope: - routes:read:all - routes:read:{domain} token: max-ttl: 3600 audit: none - path: /v2/accounts/{account_id}/routes/{route_id} method: put operationId: updateRoute x-agentic-access: action-class: acting consequence: physical subject: required scope: - routes:write:all - routes:write:{domain} audience: null token: max-ttl: 300 exchange: true purpose-required: true escalation: human-in-the-loop: conditional triggers: - abnormal - high-value audit: required - path: /v2/accounts/{account_id}/routes/{route_id} method: delete operationId: deleteRoute x-agentic-access: action-class: acting consequence: physical subject: required scope: - routes:delete:all - routes:delete:{domain} audience: null token: max-ttl: 300 exchange: true purpose-required: true escalation: human-in-the-loop: conditional triggers: - abnormal - high-value audit: required - path: /v2/accounts/{account_id}/webhooks method: get operationId: getWebhooks x-agentic-access: action-class: connected consequence: read subject: optional scope: - webhooks:read:all - webhooks:read:{domain} token: max-ttl: 3600 audit: none - path: /v2/accounts/{account_id}/webhooks method: post operationId: createWebhook x-agentic-access: action-class: acting consequence: physical subject: required scope: - webhooks:write:all - webhooks:write:{domain} audience: null token: max-ttl: 300 exchange: true purpose-required: true escalation: human-in-the-loop: conditional triggers: - abnormal - high-value audit: required - path: /v2/accounts/{account_id}/webhooks/{webhook_id} method: get operationId: getWebhook x-agentic-access: action-class: connected consequence: read subject: optional scope: - webhooks:read:all - webhooks:read:{domain} token: max-ttl: 3600 audit: none - path: /v2/accounts/{account_id}/webhooks/{webhook_id} method: put operationId: updateWebhook x-agentic-access: action-class: acting consequence: physical subject: required scope: - webhooks:write:all - webhooks:write:{domain} audience: null token: max-ttl: 300 exchange: true purpose-required: true escalation: human-in-the-loop: conditional triggers: - abnormal - high-value audit: required - path: /v2/accounts/{account_id}/webhooks/{webhook_id} method: delete operationId: deleteWebhook x-agentic-access: action-class: acting consequence: physical subject: required scope: - webhooks:delete:all - webhooks:delete:{domain} audience: null token: max-ttl: 300 exchange: true purpose-required: true escalation: human-in-the-loop: conditional triggers: - abnormal - high-value audit: required - path: /v2/accounts/{account_id}/smtp-credentials method: get operationId: getSMTPCredentials x-agentic-access: action-class: connected consequence: read subject: optional scope: - smtp-credentials:read:all - smtp-credentials:read:{domain} token: max-ttl: 3600 audit: none - path: /v2/accounts/{account_id}/smtp-credentials method: post operationId: createSMTPCredential x-agentic-access: action-class: acting consequence: physical subject: required scope: - smtp-credentials:write:all - smtp-credentials:write:{domain} audience: null token: max-ttl: 300 exchange: true purpose-required: true escalation: human-in-the-loop: conditional triggers: - abnormal - high-value audit: required - path: /v2/accounts/{account_id}/smtp-credentials/{smtp_credential_id} method: get operationId: getSMTPCredential x-agentic-access: action-class: connected consequence: read subject: optional scope: - smtp-credentials:read:all - smtp-credentials:read:{domain} token: max-ttl: 3600 audit: none - path: /v2/accounts/{account_id}/smtp-credentials/{smtp_credential_id} method: delete operationId: deleteSMTPCredential x-agentic-access: action-class: acting consequence: physical subject: required scope: - smtp-credentials:delete:all - smtp-credentials:delete:{domain} audience: null token: max-ttl: 300 exchange: true purpose-required: true escalation: human-in-the-loop: conditional triggers: - abnormal - high-value audit: required - path: /v2/accounts/{account_id}/statistics/transactional/deliverability method: get operationId: getDeliverabilityStatistics x-agentic-access: action-class: connected consequence: read subject: optional scope: - statistics-transactional:read:all - statistics-transactional:read:{domain} token: max-ttl: 3600 audit: none - path: /v2/accounts/{account_id}/statistics/transactional/bounce method: get operationId: getBounceStatistics x-agentic-access: action-class: connected consequence: read subject: optional scope: - statistics-transactional:read:all - statistics-transactional:read:{domain} token: max-ttl: 3600 audit: none - path: /v2/accounts/{account_id}/statistics/transactional/delivery-time method: get operationId: getDeliveryTimeStatistics x-agentic-access: action-class: connected consequence: read subject: optional scope: - statistics-transactional:read:all - statistics-transactional:read:{domain} token: max-ttl: 3600 audit: none - path: /email/send method: post operationId: sendEmail x-agentic-access: action-class: acting consequence: physical subject: required scope: - read:email - write:email audience: null token: max-ttl: 300 exchange: true purpose-required: true escalation: human-in-the-loop: conditional triggers: - abnormal - high-value audit: required