VirusTotal · Agentic Access

VirusTotal Agentic Access

x-agentic-access generated

VirusTotal exposes 206 API operations that an AI agent could call, of which 56 are state-changing ‘acting’ operations. This is a recommended x-agentic-access execution contract — the scope, audience, consequence tier, short-lived token constraints, and escalation each action should carry before it is handed to an autonomous agent.

By consequence: 150 read, 39 write, 6 physical, and 11 safety-critical.

11 operations are classed safety-critical and should require human-in-the-loop approval at runtime.

Contracts are classified heuristically from the provider’s OpenAPI and refresh on every APIs.io network build; audience is bound per deployment. The model follows Curity’s Access Intelligence (apidays Munich 2026). Browse every provider’s agent contracts at agentic-access.apis.io.

Anti-MalwareThreat IntelligenceSecurityFile AnalysisURL AnalysisYARAIoCSandboxMITRE ATT&CKGoogle Cloud
Operations: 206 Acting: 56 Human-in-the-loop: 11 Method: generated

By consequence

read 150 write 39 physical 6 safety-critical 11

Highest-consequence actions

The physical and safety-critical operations an agent could invoke — the ones that most warrant scoped tokens, tight TTLs, and escalation. Full per-operation contracts are in the source below.

MethodPathConsequenceHuman-in-loop
DELETE /graphs/{id}/relationships/editors/{user_or_group_id} safety-critical required
DELETE /graphs/{id}/relationships/viewers/{user_or_group_id} safety-critical required
PATCH /groups/{id} safety-critical required
POST /groups/{id}/relationships/administrators safety-critical required
DELETE /groups/{id}/relationships/administrators/{user_id} safety-critical required
POST /groups/{id}/relationships/service_accounts safety-critical required
POST /groups/{id}/relationships/users safety-critical required
DELETE /groups/{id}/relationships/users/{user_id} safety-critical required
DELETE /intelligence/hunting_rulesets/{id}/relationships/editors/{user_or_group_id} safety-critical required
DELETE /users/{id} safety-critical required
PATCH /users/{id} safety-critical required
DELETE /collections/{id}/{relationship} physical conditional
POST /collections/{id}/{relationship} physical conditional
POST /graphs/{id}/relationships/editors physical conditional
POST /graphs/{id}/relationships/viewers physical conditional
POST /intelligence/hunting_rulesets/{id}/relationships/editors physical conditional
POST /intelligence/hunting_rulesets/{id}/relationships/owner physical conditional

Source

Agentic Access

Raw ↑
generated: '2026-07-15'
method: generated
source: openapi/virustotal-access-control-openapi.yml, openapi/virustotal-ioc-feeds-openapi.yml,
  openapi/virustotal-ioc-investigation-openapi.yml, openapi/virustotal-private-scanning-openapi.yml,
  openapi/virustotal-threat-graphs-openapi.yml, openapi/virustotal-threat-landscape-openapi.yml,
  openapi/virustotal-yara-hunting-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: 206
  by_action_class:
    connected: 150
    acting: 56
  by_consequence:
    read: 150
    safety-critical: 11
    write: 39
    physical: 6
  human_in_the_loop_required: 11
operations:
- path: /groups/{id}
  method: get
  operationId: groups
  x-agentic-access:
    action-class: connected
    consequence: read
    subject: optional
    token:
      max-ttl: 3600
    audit: none
- path: /groups/{id}
  method: patch
  operationId: patchGroup
  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: /groups/{id}/relationships/administrators
  method: get
  operationId: getGroupAdministrators
  x-agentic-access:
    action-class: connected
    consequence: read
    subject: optional
    token:
      max-ttl: 3600
    audit: none
- path: /groups/{id}/relationships/administrators
  method: post
  operationId: postGroupAdministrators
  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: /groups/{id}/relationships/administrators/{user_id}
  method: delete
  operationId: deleteUserGroupAdministrator
  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: /groups/{id}/relationships/administrators/{user_id}
  method: get
  operationId: checkUserGroupAdministrator
  x-agentic-access:
    action-class: connected
    consequence: read
    subject: optional
    token:
      max-ttl: 3600
    audit: none
- path: /groups/{id}/relationships/users
  method: get
  operationId: getGroupUsers
  x-agentic-access:
    action-class: connected
    consequence: read
    subject: optional
    token:
      max-ttl: 3600
    audit: none
- path: /groups/{id}/relationships/users
  method: post
  operationId: updateGroupUsers
  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: /groups/{id}/relationships/users/{user_id}
  method: delete
  operationId: deleteUserFromGroup
  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: /groups/{id}/relationships/users/{user_id}
  method: get
  operationId: checkUserInGroup
  x-agentic-access:
    action-class: connected
    consequence: read
    subject: optional
    token:
      max-ttl: 3600
    audit: none
- path: /groups/{id}/relationships/{relationship}
  method: get
  operationId: groupsRelationshipsIds
  x-agentic-access:
    action-class: connected
    consequence: read
    subject: optional
    token:
      max-ttl: 3600
    audit: none
- path: /groups/{id}/{relationship}
  method: get
  operationId: groupsRelationships
  x-agentic-access:
    action-class: connected
    consequence: read
    subject: optional
    token:
      max-ttl: 3600
    audit: none
- path: /users/{id}/api_usage
  method: get
  operationId: userApiUsage
  x-agentic-access:
    action-class: connected
    consequence: read
    subject: optional
    token:
      max-ttl: 3600
    audit: none
- path: /users/{id}/overall_quotas
  method: get
  operationId: getUserOverallQuotas
  x-agentic-access:
    action-class: connected
    consequence: read
    subject: optional
    token:
      max-ttl: 3600
    audit: none
- path: /groups/{id}/api_usage
  method: get
  operationId: groupApiUsage
  x-agentic-access:
    action-class: connected
    consequence: read
    subject: optional
    token:
      max-ttl: 3600
    audit: none
- path: /groups/{id}/relationships/service_accounts
  method: get
  operationId: getServiceAccountsOfAGroup
  x-agentic-access:
    action-class: connected
    consequence: read
    subject: optional
    token:
      max-ttl: 3600
    audit: none
- path: /groups/{id}/relationships/service_accounts
  method: post
  operationId: createANewServiceAccount
  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: /service_accounts/{id}
  method: get
  operationId: getAServiceAccountObject
  x-agentic-access:
    action-class: connected
    consequence: read
    subject: optional
    token:
      max-ttl: 3600
    audit: none
- path: /users/{id}
  method: delete
  operationId: deleteUserId
  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: /users/{id}
  method: get
  operationId: user
  x-agentic-access:
    action-class: connected
    consequence: read
    subject: optional
    token:
      max-ttl: 3600
    audit: none
- path: /users/{id}
  method: patch
  operationId: patchUserId
  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: /users/{id}/relationships/{relationship}
  method: get
  operationId: getUsersRelationshipsIds
  x-agentic-access:
    action-class: connected
    consequence: read
    subject: optional
    token:
      max-ttl: 3600
    audit: none
- path: /users/{id}/{relationship}
  method: get
  operationId: usersRelationships
  x-agentic-access:
    action-class: connected
    consequence: read
    subject: optional
    token:
      max-ttl: 3600
    audit: none
- path: /feeds/domains/hourly/{time}
  method: get
  operationId: feedsdomainshourly2time
  x-agentic-access:
    action-class: connected
    consequence: read
    subject: optional
    token:
      max-ttl: 3600
    audit: none
- path: /feeds/domains/{time}
  method: get
  operationId: feedsdomains2time
  x-agentic-access:
    action-class: connected
    consequence: read
    subject: optional
    token:
      max-ttl: 3600
    audit: none
- path: /feeds/files/hourly/{time}
  method: get
  operationId: feedsFileHourly
  x-agentic-access:
    action-class: connected
    consequence: read
    subject: optional
    token:
      max-ttl: 3600
    audit: none
- path: /feeds/files/{time}
  method: get
  operationId: feedsFile
  x-agentic-access:
    action-class: connected
    consequence: read
    subject: optional
    token:
      max-ttl: 3600
    audit: none
- path: /feeds/files/{token}/download
  method: get
  operationId: fileFeedDownload
  x-agentic-access:
    action-class: connected
    consequence: read
    subject: optional
    token:
      max-ttl: 3600
    audit: none
- path: /feeds/ip_addresses/hourly/{time}
  method: get
  operationId: feedsipAddresseshourly2time
  x-agentic-access:
    action-class: connected
    consequence: read
    subject: optional
    token:
      max-ttl: 3600
    audit: none
- path: /feeds/ip_addresses/{time}
  method: get
  operationId: feedsipAddressestime
  x-agentic-access:
    action-class: connected
    consequence: read
    subject: optional
    token:
      max-ttl: 3600
    audit: none
- path: /feeds/file_behaviours/hourly/{time}
  method: get
  operationId: feedsFileBehaviourHourly
  x-agentic-access:
    action-class: connected
    consequence: read
    subject: optional
    token:
      max-ttl: 3600
    audit: none
- path: /feeds/file_behaviours/{time}
  method: get
  operationId: feedsFileBehaviour
  x-agentic-access:
    action-class: connected
    consequence: read
    subject: optional
    token:
      max-ttl: 3600
    audit: none
- path: /feeds/file_behaviours/{token}/evtx
  method: get
  operationId: fileBehaviourFeedEvtx
  x-agentic-access:
    action-class: connected
    consequence: read
    subject: optional
    token:
      max-ttl: 3600
    audit: none
- path: /feeds/file_behaviours/{token}/html
  method: get
  operationId: fileBehaviourFeedHtml
  x-agentic-access:
    action-class: connected
    consequence: read
    subject: optional
    token:
      max-ttl: 3600
    audit: none
- path: /feeds/file_behaviours/{token}/memdump
  method: get
  operationId: fileBehaviourFeedMemdump
  x-agentic-access:
    action-class: connected
    consequence: read
    subject: optional
    token:
      max-ttl: 3600
    audit: none
- path: /feeds/file_behaviours/{token}/pcap
  method: get
  operationId: fileBehaviourFeedPcap
  x-agentic-access:
    action-class: connected
    consequence: read
    subject: optional
    token:
      max-ttl: 3600
    audit: none
- path: /feeds/urls/hourly/{time}
  method: get
  operationId: feedsUrlHourly
  x-agentic-access:
    action-class: connected
    consequence: read
    subject: optional
    token:
      max-ttl: 3600
    audit: none
- path: /feeds/urls/{time}
  method: get
  operationId: feedsUrl
  x-agentic-access:
    action-class: connected
    consequence: read
    subject: optional
    token:
      max-ttl: 3600
    audit: none
- path: /analyses/{id}
  method: get
  operationId: analysis
  x-agentic-access:
    action-class: connected
    consequence: read
    subject: optional
    token:
      max-ttl: 3600
    audit: none
- path: /analyses/{id}/relationships/{relationship}
  method: get
  operationId: analysesGetDescriptors
  x-agentic-access:
    action-class: connected
    consequence: read
    subject: optional
    token:
      max-ttl: 3600
    audit: none
- path: /analyses/{id}/{relationship}
  method: get
  operationId: analysesGetObjects
  x-agentic-access:
    action-class: connected
    consequence: read
    subject: optional
    token:
      max-ttl: 3600
    audit: none
- path: /submission/{id}
  method: get
  operationId: getSubmission
  x-agentic-access:
    action-class: connected
    consequence: read
    subject: optional
    token:
      max-ttl: 3600
    audit: none
- path: /operations/{id}
  method: get
  operationId: getOperationsId
  x-agentic-access:
    action-class: connected
    consequence: read
    subject: optional
    token:
      max-ttl: 3600
    audit: none
- path: /attack_tactics/{id}
  method: get
  operationId: attackTacticsid
  x-agentic-access:
    action-class: connected
    consequence: read
    subject: optional
    token:
      max-ttl: 3600
    audit: none
- path: /attack_tactics/{id}/relationships/{relationship}
  method: get
  operationId: attackTacticsidrelationshipsrelationship
  x-agentic-access:
    action-class: connected
    consequence: read
    subject: optional
    token:
      max-ttl: 3600
    audit: none
- path: /attack_tactics/{id}/{relationship}
  method: get
  operationId: attackTacticsidrelationship
  x-agentic-access:
    action-class: connected
    consequence: read
    subject: optional
    token:
      max-ttl: 3600
    audit: none
- path: /attack_techniques/{id}
  method: get
  operationId: attackTechniqueid
  x-agentic-access:
    action-class: connected
    consequence: read
    subject: optional
    token:
      max-ttl: 3600
    audit: none
- path: /attack_techniques/{id}/relationships/{relationship}
  method: get
  operationId: attackTechniquesidrelationshipsrelationship
  x-agentic-access:
    action-class: connected
    consequence: read
    subject: optional
    token:
      max-ttl: 3600
    audit: none
- path: /attack_techniques/{id}/{relationship}
  method: get
  operationId: attackTechniqueidrelationship
  x-agentic-access:
    action-class: connected
    consequence: read
    subject: optional
    token:
      max-ttl: 3600
    audit: none
- path: /comments
  method: get
  operationId: getComments
  x-agentic-access:
    action-class: connected
    consequence: read
    subject: optional
    token:
      max-ttl: 3600
    audit: none
- path: /comments/{id}
  method: delete
  operationId: commentIdDelete
  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: /comments/{id}
  method: get
  operationId: getComment
  x-agentic-access:
    action-class: connected
    consequence: read
    subject: optional
    token:
      max-ttl: 3600
    audit: none
- path: /comments/{id}/relationships/{relationship}
  method: get
  operationId: commentsRelationshipsIds
  x-agentic-access:
    action-class: connected
    consequence: read
    subject: optional
    token:
      max-ttl: 3600
    audit: none
- path: /comments/{id}/vote
  method: post
  operationId: voteComment
  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: /comments/{id}/{relationship}
  method: get
  operationId: commentsRelationships
  x-agentic-access:
    action-class: connected
    consequence: read
    subject: optional
    token:
      max-ttl: 3600
    audit: none
- path: /domains/{domain}
  method: get
  operationId: domainInfo
  x-agentic-access:
    action-class: connected
    consequence: read
    subject: optional
    token:
      max-ttl: 3600
    audit: none
- path: /domains/{domain}/comments
  method: get
  operationId: domainsCommentsGet
  x-agentic-access:
    action-class: connected
    consequence: read
    subject: optional
    token:
      max-ttl: 3600
    audit: none
- path: /domains/{domain}/comments
  method: post
  operationId: domainsCommentsPost
  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: /domains/{domain}/relationships/{relationship}
  method: get
  operationId: domainsRelationshipsIds
  x-agentic-access:
    action-class: connected
    consequence: read
    subject: optional
    token:
      max-ttl: 3600
    audit: none
- path: /domains/{domain}/votes
  method: get
  operationId: domainsVotesGet
  x-agentic-access:
    action-class: connected
    consequence: read
    subject: optional
    token:
      max-ttl: 3600
    audit: none
- path: /domains/{domain}/votes
  method: post
  operationId: domainVotesPost
  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: /domains/{domain}/{relationship}
  method: get
  operationId: domainsRelationships
  x-agentic-access:
    action-class: connected
    consequence: read
    subject: optional
    token:
      max-ttl: 3600
    audit: none
- path: /resolutions/{id}
  method: get
  operationId: getResolutionById
  x-agentic-access:
    action-class: connected
    consequence: read
    subject: optional
    token:
      max-ttl: 3600
    audit: none
- path: /files/upload_url
  method: get
  operationId: filesUploadUrl
  x-agentic-access:
    action-class: connected
    consequence: read
    subject: optional
    token:
      max-ttl: 3600
    audit: none
- path: /files
  method: post
  operationId: filesScan
  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: /files/{id}
  method: get
  operationId: fileInfo
  x-agentic-access:
    action-class: connected
    consequence: read
    subject: optional
    token:
      max-ttl: 3600
    audit: none
- path: /files/{id}/analyse
  method: post
  operationId: filesAnalyse
  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: /files/{id}/comments
  method: get
  operationId: filesCommentsGet
  x-agentic-access:
    action-class: connected
    consequence: read
    subject: optional
    token:
      max-ttl: 3600
    audit: none
- path: /files/{id}/comments
  method: post
  operationId: filesCommentsPost
  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: /files/{id}/download
  method: get
  operationId: filesDownload
  x-agentic-access:
    action-class: connected
    consequence: read
    subject: optional
    token:
      max-ttl: 3600
    audit: none
- path: /files/{id}/download_url
  method: get
  operationId: filesDownloadUrl
  x-agentic-access:
    action-class: connected
    consequence: read
    subject: optional
    token:
      max-ttl: 3600
    audit: none
- path: /files/{id}/relationships/{relationship}
  method: get
  operationId: filesRelationshipsIds
  x-agentic-access:
    action-class: connected
    consequence: read
    subject: optional
    token:
      max-ttl: 3600
    audit: none
- path: /files/{id}/votes
  method: get
  operationId: filesVotesGet
  x-agentic-access:
    action-class: connected
    consequence: read
    subject: optional
    token:
      max-ttl: 3600
    audit: none
- path: /files/{id}/votes
  method: post
  operationId: filesVotesPost
  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: /files/{id}/{relationship}
  method: get
  operationId: filesRelationships
  x-agentic-access:
    action-class: connected
    consequence: read
    subject: optional
    token:
      max-ttl: 3600
    audit: none
- path: /sigma_rules/{id}
  method: get
  operationId: getSigmaRules
  x-agentic-access:
    action-class: connected
    consequence: read
    subject: optional
    token:
      max-ttl: 3600
    audit: none
- path: /yara_rulesets/{id}
  method: get
  operationId: getYaraRulesets
  x-agentic-access:
    action-class: connected
    consequence: read
    subject: optional
    token:
      max-ttl: 3600
    audit: none
- path: /file_behaviours/{sandbox_id}
  method: get
  operationId: getFileBehaviourId
  x-agentic-access:
    action-class: connected
    consequence: read
    subject: optional
    token:
      max-ttl: 3600
    audit: none
- path: /file_behaviours/{sandbox_id}/evtx
  method: get
  operationId: fileBehaviourEvtx
  x-agentic-access:
    action-class: connected
    consequence: read
    subject: optional
    token:
      max-ttl: 3600
    audit: none
- path: /file_behaviours/{sandbox_id}/html
  method: get
  operationId: getFileBehaviourHtml
  x-agentic-access:
    action-class: connected
    consequence: read
    subject: optional
    token:
      max-ttl: 3600
    audit: none
- path: /file_behaviours/{sandbox_id}/memdump
  method: get
  operationId: fileBehaviourMemdump
  x-agentic-access:
    action-class: connected
    consequence: read
    subject: optional
    token:
      max-ttl: 3600
    audit: none
- path: /file_behaviours/{sandbox_id}/pcap
  method: get
  operationId: fileBehavioursPcap
  x-agentic-access:
    action-class: connected
    consequence: read
    subject: optional
    token:
      max-ttl: 3600
    audit: none
- path: /file_behaviours/{sandbox_id}/relationships/{relationship}
  method: get
  operationId: fileBehaviourssandboxIdrelationshipsrelationship
  x-agentic-access:
    action-class: connected
    consequence: read
    subject: optional
    token:
      max-ttl: 3600
    audit: none
- path: /file_behaviours/{sandbox_id}/{relationship}
  method: get
  operationId: fileBehaviourssandboxIdrelationship
  x-agentic-access:
    action-class: connected
    consequence: read
    subject: optional
    token:
      max-ttl: 3600
    audit: none
- path: /files/{id}/behaviour_mitre_trees
  method: get
  operationId: getASummaryOfAllMitreAttckTechniquesObservedInAFile
  x-agentic-access:
    action-class: connected
    consequence: read
    subject: optional
    token:
      max-ttl: 3600
    audit: none
- path: /files/{id}/behaviour_summary
  method: get
  operationId: fileAllBehavioursSummary
  x-agentic-access:
    action-class: connected
    consequence: read
    subject: optional
    token:
      max-ttl: 3600
    audit: none
- path: /files/{id}/behaviours
  method: get
  operationId: getAllBehaviorReportsForAFile
  x-agentic-access:
    action-class: connected
    consequence: read
    subject: optional
    token:
      max-ttl: 3600
    audit: none
- path: /ip_addresses/{ip}
  method: get
  operationId: ipInfo
  x-agentic-access:
    action-class: connected
    consequence: read
    subject: optional
    token:
      max-ttl: 3600
    audit: none
- path: /ip_addresses/{ip}/comments
  method: get
  operationId: ipCommentsGet
  x-agentic-access:
    action-class: connected
    consequence: read
    subject: optional
    token:
      max-ttl: 3600
    audit: none
- path: /ip_addresses/{ip}/comments
  method: post
  operationId: ipCommentsPost
  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: /ip_addresses/{ip}/relationships/{relationship}
  method: get
  operationId: ipRelationshipsIds
  x-agentic-access:
    action-class: connected
    consequence: read
    subject: optional
    token:
      max-ttl: 3600
    audit: none
- path: /ip_addresses/{ip}/votes
  method: get
  operationId: ipVotes
  x-agentic-access:
    action-class: connected
    consequence: read
    subject: optional
    token:
      max-ttl: 3600
    audit: none
- path: /ip_addresses/{ip}/votes
  method: post
  operationId: ipVotesPost
  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: /ip_addresses/{ip}/{relationship}
  method: get
  operationId: ipRelationships
  x-agentic-access:
    action-class: connected
    consequence: read
    subject: optional
    token:
      max-ttl: 3600
    audit: none
- path: /popular_threat_categories
  method: get
  operationId: popularThreatCategories
  x-agentic-access:
    action-class: connected
    consequence: read
    subject: optional
    token:
      max-ttl: 3600
    audit: none
- path: /intelligence/search
  method: get
  operationId: intelligenceSearch
  x-agentic-access:
    action-class: connected
    consequence: read
    subject: optional
    token:
      max-ttl: 3600
    audit: none
- path: /intelligence/search/snippets/{snippet}
  method: get
  operationId: intelligenceSearchSnippets
  x-agentic-access:
    action-class: connected
    consequence: read
    subject: optional
    token:
      max-ttl: 3600
    audit: none
- path: /metadata
  method: get
  operationId: metadata
  x-agentic-access:
    action-class: connected
    consequence: read
    subject: optional
    token:
      max-ttl: 3600
    audit: none
- path: /search
  method: get
  operationId: apiSearch
  x-agentic-access:
    action-class: connected
    consequence: read
    subject: optional
    token:
      max-ttl: 3600
    audit: none
- path: /urls
  method: post
  operationId: scanUrl
  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: /urls/{id}
  method: get
  operationId: urlInfo
  x-agentic-access:
    action-class: connected
    consequence: read
    subject: optional
    token:
      max-ttl: 3600
    audit: none
- path: /urls/{id}/analyse
  method: post
  operationId: urlsAnalyse
  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: /urls/{id}/comments
  method: get
  operationId: urlsCommentsGet
  x-agentic-access:
    action-class: connected
    consequence: read
    subject: optional
    token:
      max-ttl: 3600
    audit: none
- path: /urls/{id}/comments
  method: post
  operationId: urlsCommentsPost
  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: /urls/{id}/relationships/{relationship}
  method: get
  operationId: urlsRelationshipsIds
  x-agentic-access:
    action-class: connected
    consequence: read
    subject: optional
    token:
      max-ttl: 3600
    audit: none
- path: /urls/{id}/votes
  method: get
  operationId: urlsVotesGet
  x-agentic-access:
    action-class: connected
    consequence: read
    subject: optional
    token:
      max-ttl: 3600
    audit: none
- path: /urls/{id}/votes
  method: post
  operationId: urlsVotesPost
  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: /urls/{id}/{relationship}
  method: get
  operationId: urlsRelationships
  x-agentic-access:
    action-class: connected
    consequence: read
    subject: optional
    token:
      max-ttl: 3600
    audit: none
- path: /intelligence/zip_files
  method: post
  operationId: zipFiles
  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: /intelligence/zip_files/{id}
  method: get
  operationId: getZipFile
  x-agentic-access:
    action-class: connected
    consequence: read
    subject: optional
    token:
      max-ttl: 3600
    audit: none
- path: /intelligence/zip_files/{id}/download
  method: get
  operationId: zipFilesDownload
  x-agentic-access:
    action-class: connected
    consequence: read
    subject: optional
    token:
      max-ttl: 3600
    audit: none
- path: /intelligence/zip_files/{id}/download_url
  method: get
  operationId: zipFilesDownloadUrl
  x-agentic-access:
    action-class: connected
    consequence: read
    subject: optional
    token:
      max-ttl: 3600
    audit: none
- path: /private/analyses
  method: get
  operationId: listPrivateAnalyses
  x-agentic-access:
    action-class: connected
    consequence: read
    subject: optional
    token:
      max-ttl: 3600
    audit: none
- path: /private/analyses/{id}
  method: get
  operationId: privateAnalysis
  x-agentic-access:
    action-class: connected
    consequence: read
    subject: optional
    token:
      max-ttl: 3600
    audit: none
- path: /private/analyses/{id}/relationships/{relationship}
  method: get
  operationId: analysesidrelationshipsrelationship
  x-agentic-access:
    action-class: connected
    consequence: read
    subject: optional
    token:
      max-ttl: 3600
    audit: none
- path: /private/analyses/{id}/{relationship}
  method: get
  operationId: analysesidrelationship
  x-agentic-access:
    action-class: connected
    consequence: read
    subject: optional
    token:
      max-ttl: 3600
    audit: none
- path: /private/files
  method: post
  operationId: uploadFilePrivateScanning
  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: /private/files
  method: get
  operationId: listPrivateFiles
  x-agentic-access:
    action-class: connected
    consequence: read
    subject: optional
    token:
      max-ttl: 3600
    audit: none
- path: /private/files/upload_url
  method: get
  operationId: privateFilesUploadUrl
  x-agentic-access:
    action-class: connected
    consequence: read
    subject: optional
    token:
      max-ttl: 3600
    audit: none
- path: /private/files/{id}
  method: delete
  operationId: deleteFilePrivateScanning
  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: /private/files/{id}
  method: get
  operationId: privateFilesInfo
  x-agentic-access:
    action-class: connected
    consequence: read
    subject: optional
    token:
      max-ttl: 3600
    audit: none
- path: /private/files/{id}/relationships/{relationship}
  method: get
  operationId: privatefilesidrelationshipsrelationship
  x-agentic-access:
    action-class: connected
    consequence: read
    subject: optional
    token:
      max-ttl: 3600
    audit: none
- path: /private/files/{id}/{relationship}
  method: get
  operationId: privateFilesRelationships
  x-agentic-access:
    action-class: connected
    consequence: read
    subject: optional
    token:
      max-ttl: 3600
    audit: none
- path: /private/files/{sha256}/analyse
  method: post
  operationId: rescanAPrivateFile
  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: /private/file/{id}/behaviours
  method: get
  operationId: getAllBehaviourReportsFromAPrivateFile
  x-agentic-access:
    action-class: connected
    consequence: read
    subject: optional
    token:
      max-ttl: 3600
    audit: none
- path: /private/file_behaviours/{sandbox_id}
  method: get
  operationId: privatefileBehaviourssandboxId
  x-agentic-access:
    action-class: connected
    consequence: read
    subject: optional
    token:
      max-ttl: 3600
    audit: none
- path: /private/file_behaviours/{sandbox_id}/evtx
  method: get
  operationId: fileBehaviourssandboxIdevtx
  x-agentic-access:
    action-class: conne

# --- truncated at 32 KB (54 KB total) ---
# Full source: https://raw.githubusercontent.com/api-evangelist/virustotal/refs/heads/main/agentic-access/virustotal-agentic-access.yml