openapi: 3.0.3
info:
title: VirusTotal API v3 - Threat Graphs
version: '3.0'
description: Create, share, edit, and search Threat Graphs — visualisations of how IoCs and threats relate. Includes the editor/viewer ACL surface.
contact:
name: VirusTotal / Google Threat Intelligence
url: https://docs.virustotal.com/reference/overview
license:
name: VirusTotal Terms of Service
url: https://www.virustotal.com/gui/terms-of-service
x-generated-from: https://storage.googleapis.com/gtidocresources/guides/GTI_API_v3_openapi_spec_10022025.json
x-last-validated: '2026-05-29'
servers:
- url: https://www.virustotal.com/api/v3
description: VirusTotal / GTI API v3 production.
security:
- VTApiKey: []
tags:
- name: Threat Graphs
description: Threat Graphs
- name: Threat Graphs Permissions & ACL
description: Threat Graphs Permissions & ACL
paths:
/graphs:
get:
tags:
- Threat Graphs
deprecated: false
description: "Endpoint used to search graphs.\n\nThere are a set of multiple modifiers that you can use to refine your search results. You can combine all of them together and use them in conjunction\
\ with AND, OR and NOT operators.\n\nDate and numeric fields support the suffix plus or minus to match values greater or less than the passed value. If not sign has been added to the modifier, you\
\ will get exact matches. You can use more than once the same modifier in the same query to define ranges: `creation_date:2018-11-1+` `creation_date:2018-11-12-` will match graphs created between\
\ 2018-11-1 and 2018-11-22.\n\n**Graph-related modifiers**\n\n| Modifier | Description | Example \
\ |\n| :------------------ | :------------------------------------------------- | :------------------------------------------------------------------- |\n| id: | Filters\
\ by graph identifier. | id:g675a2fd4c8834e288afd71bbbe88f78884e7d21a8c9348b5ab45cc9281cffc3c |\n| name: | Filters by graph name. \
\ | name:Wannacry |\n| owner: | Filters by graphs owned by user. | owner:richard_hendricks \
\ |\n| group: | Filters by graphs owned by group. | group:piedpiper |\n| visible_to_user:\
\ | Filters by graphs visible to user. | visible_to_user:richard_hendricks |\n| visible_to_group: | Filters by graphs visible to group. \
\ | visible_to_group:piedpiper |\n| private: | Filters by private graphs. | private:true, private:false\
\ |\n| creation_date: | Filters by the graph creation date. | creation_date:2018-11-1 |\n\
| last_modified_date: | Filters by the last date the graph was modified. | last_modified_date:2018-11-12 |\n| total_nodes: | Filters by graphs containing\
\ some amount of nodes. | total_nodes:100 |\n| comments_count: | Filter by the number of comments of the graph. | comments_count:10+\
\ |\n| views_count: | Filter by the number of graph views. | views_count:1000+ \
\ |\n\n**Node-related modifiers**\n\n| Modifier | Description | Example |\n|\
\ :---------- | :------------------------------------------------------- | :-------------------------------------------------------------------- |\n| label: | Filters by graphs containing nodes\
\ with a specific label | label:Kill switch |\n| file: | Filters by graphs containing the file. | file:131f95c51cc819465fa1797f6ccacf9d494aaaff46fa3eac73ae63ffbdfd8267\
\ |\n| domain: | Filters by graphs containing the domain. | domain:piedpiper.com |\n| ip_address: | Filters by graphs containing\
\ the ip address. | ip_address:1.1.1.1 |\n| url: | Filters by graphs containing the url. | url:\
\ |\n| actor: | Filters by graphs containing the actor. | actor:funny bear |\n| victim:\
\ | Filters by graphs containing the victim. | victim:richard_hendricks |\n| email: | Filters by graphs containing the email.\
\ | email:[richard@piedpiper.com](mailto:richard@piedpiper.com) |\n| department: | Filters by graphs containing the department. | department:engineers \
\ |\n\nIn addition to these modifiers, you can do a free search query. The search engine will return graphs that match the query with the content of\
\ any field in the graph.\n\n```curl All graphs\ncurl --request POST \\\n --url https://www.virustotal.com/api/v3/graphs \\\n --header 'x-apikey: '\n```\n```curl FIlter by user\n\
curl --request POST \\\n --url https://www.virustotal.com/api/v3/graphs?filter=owner:bbunny \\\n --header 'x-apikey: '\n```\n```curl Attributes selection\ncurl --request POST \\\n\
\ --url https://www.virustotal.com/api/v3/graphs?filter=owner:bbunny&attributes=private,graph_data \\\n --header 'x-apikey: '\n```\n```curl Filter by domain\ncurl --request POST\
\ \\\n --url https://www.virustotal.com/api/v3/graphs?filter=domain:hooli.com \\\n --header 'x-apikey: '\n```\n\nSupported `order` fields are: `name`, `owner`, `creation_date`, `last_modified_date`,\
\ `views_count` and `comments_count`.\n"
operationId: graphs
parameters:
- description: Return the graphs matching the given criteria only
in: query
name: filter
schema:
type: string
- description: Maximum number graphs to retrieve
in: query
name: limit
schema:
format: int32
type: integer
- description: Continuation cursor
in: query
name: cursor
schema:
type: string
- description: Sort order
in: query
name: order
schema:
type: string
- description: Specific fields to retrieve
in: query
name: attributes
schema:
type: string
security:
- VTApiKey: []
summary: VirusTotal Search Graphs
responses:
'200':
description: Successful VirusTotal API response.
content:
application/json:
schema:
$ref: '#/components/schemas/DataEnvelope'
'400':
description: Bad request.
content:
application/json:
schema:
$ref: '#/components/schemas/ErrorResponse'
'401':
description: Missing or invalid API key.
content:
application/json:
schema:
$ref: '#/components/schemas/ErrorResponse'
'404':
description: Object not found.
content:
application/json:
schema:
$ref: '#/components/schemas/ErrorResponse'
'429':
description: Rate limit or quota exceeded.
content:
application/json:
schema:
$ref: '#/components/schemas/ErrorResponse'
x-microcks-operation:
delay: 0
dispatcher: FALLBACK
post:
tags:
- Threat Graphs
deprecated: false
description: "This endpoint can be used to create new graphs. Note that private graphs will increment the usage of the private graphs quota in your Google Threat Intelligence plan. \n\n```json Request\
\ example\n{\n \"data\": {\n \"attributes\": {\n \"comments_count\": 0,\n \"creation_date\": 1599060646,\n \"graph_data\": {\n \"description\": \"test\",\n \"version\"\
: \"5.0.0\"\n },\n \"last_modified_date\": 1599117623,\n \"links\": [\n {\n \"connection_type\": \"last_serving_ip_address\",\n \"source\": \"ecd87dff4decb36ebf35cf2d327cce62fe1e5666d694c4b0f11ff67d540ff4dc\"\
,\n \"target\": \"relationships_last_serving_ip_address_ecd87dff4decb36ebf35cf2d327cce62fe1e5666d694c4b0f11ff67d540ff4dc\"\n },\n {\n \"connection_type\": \"last_serving_ip_address\"\
,\n \"source\": \"relationships_last_serving_ip_address_e743cffce9efddfb4f1d7e7dc3c10c6d562e61b5f65e6dd3fd4f28b604fcc2f6\",\n \"target\": \"138.133.35.39\"\n },\n \
\ {\n \"connection_type\": \"contacted_ips\",\n \"source\": \"e743cffce9efddfb4f1d7e7dc3c10c6d562e61b5f65e6dd3fd4f28b604fcc2f6\",\n \"target\": \"relationships_contacted_ips_e743cffce9efddfb4f1d7e7dc3c10c6d562e61b5f65e6dd3fd4f28b604fcc2f6\"\
\n },\n {\n \"connection_type\": \"contacted_ips\",\n \"source\": \"relationships_contacted_ips_e743cffce9efddfb4f1d7e7dc3c10c6d562e61b5f65e6dd3fd4f28b604fcc2f6\"\
,\n \"target\": \"138.133.35.39\"\n },\n {\n \"connection_type\": \"commonality\",\n \"source\": \"relationships_commonality_106438826\",\n \"target\"\
: \"f053cb783411211b54e2837ec01e0998e3d9bc042f599d95f7f2cb4ba348305d\"\n },\n {\n \"connection_type\": \"hunting\",\n \"source\": \"relationships_hunting_6534979578789888\"\
,\n \"target\": \"5a041d8d72fc12d21e09fd781831ff8279199025c3b3da4b13ec24d20200340f\"\n }\n ],\n \"nodes\": [\n {\n \"entity_attributes\": {\n \
\ \"has_detections\": true\n },\n \"entity_id\": \"e743cffce9efddfb4f1d7e7dc3c10c6d562e61b5f65e6dd3fd4f28b604fcc2f6\",\n \"index\": 0,\n \"text\": \"\",\n \
\ \"type\": \"url\",\n \"x\": 0,\n \"y\": 0\n },\n {\n \"entity_attributes\": {},\n \"entity_id\": \"relationships_last_serving_ip_address_e743cffce9efddfb4f1d7e7dc3c10c6d562e61b5f65e6dd3fd4f28b604fcc2f6\"\
,\n \"index\": 1,\n \"text\": \"\",\n \"type\": \"relationship\",\n \"x\": -27.425258029385414,\n \"y\": -19.198748008541706\n },\n {\n\
\ \"entity_attributes\": {\n \"country\": \"OM\",\n \"has_detections\": true\n },\n \"entity_id\": \"138.133.35.39\",\n \"fx\": -60.42155469411466,\n\
\ \"fy\": -1.7339803589372877,\n \"index\": 2,\n \"text\": \"\",\n \"type\": \"ip_address\",\n \"x\": -60.42155469411466,\n \"y\": -1.7339803589372877\n\
\ },\n {\n \"entity_attributes\": {\n \"has_detections\": false,\n \"type_tag\": \"text\"\n },\n \"entity_id\": \"733314c4b079b42174c6b55fb89755faca798378ab999ea240b3f14b0d24a90f\"\
,\n \"index\": 6,\n \"text\": \"\",\n \"type\": \"file\",\n \"x\": 27.265746471390678,\n \"y\": -9.726931961146573\n },\n {\n \
\ \"entity_attributes\": {\n \"has_detections\": false\n },\n \"entity_id\": \"www.blablabla.com\",\n \"index\": 88,\n \"text\": \"\",\n \"\
type\": \"domain\",\n \"x\": -234.75082645175817,\n \"y\": 8.15972244734705\n },\n {\n \"entity_attributes\": {\n \"intelligence_query\": \"entity:\
\ url path: blablabla\",\n \"relationship_type\": \"intelligence\"\n },\n \"entity_id\": \"intelligence_-1173580683\",\n \"index\": 154,\n \"text\"\
: \"VTI: entity: url path: blablabla\",\n \"type\": \"relationship\",\n \"x\": -27.95565446983731,\n \"y\": -64.23455937679253\n },,\n {\n \"entity_attributes\"\
: {\n \"commonalities\": [\n {\n \"commonality\": \"path\",\n \"value\": \"/\"\n }\n ],\n \"relationship_type\"\
: \"commonality\"\n },\n \"entity_id\": \"relationships_commonality_106438826\",\n \"fx\": -107.49097518267031,\n \"fy\": 198.2339878510857,\n \"index\"\
: 160,\n \"text\": \"path: /\",\n \"type\": \"relationship\",\n \"x\": -107.49097518267031,\n \"y\": 198.2339878510857\n },\n {\n \"entity_attributes\"\
: {\n \"relationship_type\": \"hunting\",\n \"ruleset_id\": \"6533973538739388\"\n },\n \"entity_id\": \"relationships_hunting_6533973538739388\",\n \
\ \"index\": 161,\n \"text\": \"\",\n \"type\": \"relationship\",\n \"x\": -130.72553403592232,\n \"y\": 346.7297024640031\n }\n ],\n \"\
private\": true\n },\n \"type\": \"graph\"\n }\n}\n```\n\n```json Response example\n{\n \"data\": {\n \"id\": \"g0538d03053194c338643183e315b134ec3463a392330430938033934f3be3f37\"\
,\n \"type\": \"graph\"\n }\n}\n```\n"
operationId: createGraphs
parameters: []
requestBody:
content:
application/json:
schema:
properties:
RAW_BODY:
format: json
type: string
type: object
security:
- VTApiKey: []
summary: VirusTotal Create a Graph
responses:
'200':
description: Successful VirusTotal API response.
content:
application/json:
schema:
$ref: '#/components/schemas/DataEnvelope'
'400':
description: Bad request.
content:
application/json:
schema:
$ref: '#/components/schemas/ErrorResponse'
'401':
description: Missing or invalid API key.
content:
application/json:
schema:
$ref: '#/components/schemas/ErrorResponse'
'404':
description: Object not found.
content:
application/json:
schema:
$ref: '#/components/schemas/ErrorResponse'
'429':
description: Rate limit or quota exceeded.
content:
application/json:
schema:
$ref: '#/components/schemas/ErrorResponse'
x-microcks-operation:
delay: 0
dispatcher: FALLBACK
/graphs/{id}:
delete:
tags:
- Threat Graphs
deprecated: false
description: VirusTotal Delete a Graph
operationId: graphsDelete
parameters:
- description: A 65 char length id which uniquely identify the graph.
in: path
name: id
required: true
schema:
type: string
responses:
'200':
content:
text/plain:
examples:
Result:
value: ''
description: '200'
'400':
description: Bad request.
content:
application/json:
schema:
$ref: '#/components/schemas/ErrorResponse'
'401':
description: Missing or invalid API key.
content:
application/json:
schema:
$ref: '#/components/schemas/ErrorResponse'
'404':
description: Object not found.
content:
application/json:
schema:
$ref: '#/components/schemas/ErrorResponse'
'429':
description: Rate limit or quota exceeded.
content:
application/json:
schema:
$ref: '#/components/schemas/ErrorResponse'
security:
- VTApiKey: []
summary: VirusTotal Delete a Graph
x-microcks-operation:
delay: 0
dispatcher: FALLBACK
get:
tags:
- Threat Graphs
deprecated: false
description: "Returns a [Graph](https://gtidocs.virustotal.com/reference/graph-object) object.\n\n```json Response example\n{\n \"data\": {\n \"attributes\": {\n \"graph_data\": {\n \
\ \"description\": \"Hooli.com investigation\"\n },\n \"links\": [\n {\n \"connection_type\": \"resolutions\",\n \"source\": \"www.hooli.com\",\n \"\
target\": \"relationships_resolutions_wwwhoolicom\"\n },\n {\n \"connection_type\": \"resolutions\",\n \"source\": \"relationships_resolutions_wwwhoolicom\",\n \
\ \"target\": \"8.8.8.8\"\n }\n ],\n \"private\": false,\n \"creation_date\": 1530006951,\n \"position\": {\n \"y\": 388,\n \"x\": 897,\n \"\
scale\": \"1\"\n },\n \"nodes\": [\n {\n \"index\": 0,\n \"entity_id\": \"www.hooli.com\",\n \"text\": \"Root Node\",\n \"y\": 65,\n \
\ \"x\": -18,\n \"type\": \"domain\"\n },\n {\n \"y\": 42,\n \"index\": 1,\n \"entity_id\": \"relationships_resolutions_wwwhoolicom\",\n \
\ \"type\": \"relationship\",\n \"x\": -56\n },\n {\n \"index\": 2,\n \"entity_id\": \"8.8.8.8\",\n \"fx\": 3.3,\n \"fy\": 4.4,\n \
\ \"y\": 0,\n \"x\": -64,\n \"type\": \"ip_address\"\n },\n {\n \"index\": 2,\n \"entity_id\": \"131f95c51cc819465fa1797f6ccacf9d494aaaff46fa3eac73ae63ffbdfd8267\"\
,\n \"fx\": 3.3,\n \"fy\": 4.4,\n \"y\": 0,\n \"x\": -64,\n \"type\": \"file\"\n },\n {\n \"index\": 2,\n \"entity_id\"\
: \"1a0556926f7e76419d12e4c6ad52f10388af11f2689f6c0fb6111a2b85f131de\",\n \"fx\": 3.3,\n \"fy\": 4.4,\n \"y\": 0,\n \"x\": -64,\n \"type\": \"url\"\n\
\ }\n ]\n },\n \"type\": \"graph\",\n \"id\": \"g3ad78ce6c21ae675e81ac376a6fc016c37befa6dc87484b95a2b069f8d04ef44\",\n \"links\": {\n \"self\": \"https://www.virustotal.com/api/v3/graphs/g3ad78ce6c21ae675e81ac376a6fc016c37befa6dc87484b95a2b069f8d04ef44\"\
\n }\n }\n}\n```\n"
operationId: graphsInfo
parameters:
- description: A 65 char length id which uniquely identify the graph.
in: path
name: id
required: true
schema:
type: string
security:
- VTApiKey: []
summary: VirusTotal Get a Graph Object
responses:
'200':
description: Successful VirusTotal API response.
content:
application/json:
schema:
$ref: '#/components/schemas/DataEnvelope'
'400':
description: Bad request.
content:
application/json:
schema:
$ref: '#/components/schemas/ErrorResponse'
'401':
description: Missing or invalid API key.
content:
application/json:
schema:
$ref: '#/components/schemas/ErrorResponse'
'404':
description: Object not found.
content:
application/json:
schema:
$ref: '#/components/schemas/ErrorResponse'
'429':
description: Rate limit or quota exceeded.
content:
application/json:
schema:
$ref: '#/components/schemas/ErrorResponse'
x-microcks-operation:
delay: 0
dispatcher: FALLBACK
patch:
tags:
- Threat Graphs
deprecated: false
description: "```json Update request example\n{\n \"data\":{\n \"attributes\": {\n \"private\": true\n },\n \"type\":\"graph\"\n }\n}\n```\n\n```json Response example\n{\n \"data\"\
: {\n \"attributes\": {\n \"private\": false,\n \"nodes\": [\n {\n \"type\":\"domain\",\n \"entity_id\":\"www.hooli.com\",\n \"x\":-18,\n \
\ \"y\":65,\n \"text\":\"Root Node\",\n \"index\":0\n },\n {\n \"type\":\"relationship\",\n \"entity_id\":\"relationships_resolutions_wwwhoolicom\"\
,\n \"x\":-56,\n \"y\":42,\n \"index\":1\n },\n {\n \"type\":\"ip_address\",\n \"entity_id\":\"8.8.8.8\",\n \"x\":-64,\n \
\ \"y\":0,\n \"index\":2,\n \"fx\":3.3,\n \"fy\":4.4\n },\n {\n \"type\":\"file\",\n \"entity_id\":\"131f95c51cc819465fa1797f6ccacf9d494aaaff46fa3eac73ae63ffbdfd8267\"\
,\n \"x\":-64,\n \"y\":0,\n \"index\":2,\n \"fx\":3.3,\n \"fy\":4.4\n },\n {\n \"type\":\"url\",\n \"entity_id\":\"1a0556926f7e76419d12e4c6ad52f10388af11f2689f6c0fb6111a2b85f131de\"\
,\n \"x\":-64,\n \"y\":0,\n \"index\":2,\n \"fx\":3.3,\n \"fy\":4.4\n }\n ],\n \"links\":[\n {\n \"source\":\"\
www.hooli.com\",\n \"target\":\"relationships_resolutions_wwwhoolicom\",\n \"connection_type\":\"resolutions\"\n },\n {\n \"source\":\"relationships_resolutions_wwwhoolicom\"\
,\n \"target\":\"8.8.8.8\",\n \"connection_type\":\"resolutions\"\n }\n ],\n \"position\": {\n \"x\":897,\n \"y\":388,\n \
\ \"scale\":\"1\"\n },\n \"graph_data\": {\n \"description\": \"Hooli.com graph\"\n }\n },\n \"type\": \"graph\"\n }\n}\n```\n"
operationId: graphsUpdate
parameters:
- description: A 65 char length id which uniquely identify the graph.
in: path
name: id
required: true
schema:
type: string
requestBody:
content:
application/json:
schema:
properties:
graph_data:
description: Highlevel graph data.
properties:
version:
description: Current version of the graph.
type: string
type: object
links:
description: Array of links.
items:
properties:
connection_type:
description: Type of the connection between the source and the target.
type: string
source:
description: Entity id of the link source.
type: string
target:
description: Entity id of the link target.
type: string
type: object
type: array
nodes:
description: Array of nodes.
items:
properties:
entity_attributes:
description: (optional) Entity related attributes.
type: object
entity_id:
description: Node entity id.
type: string
fx:
description: (optional) Force x position.
format: float
type: number
fy:
description: (optional) Force y position.
format: float
type: number
index:
description: Index of the node list.
format: int32
type: integer
text:
description: (optional) Node label.
type: string
type:
description: Node entity type.
type: string
x:
description: X position of the node.
format: float
type: number
y:
description: Y position of the node.
format: float
type: number
type: object
type: array
private:
description: Private status.
type: boolean
type: object
security:
- VTApiKey: []
summary: VirusTotal Update a Graph Object
responses:
'200':
description: Successful VirusTotal API response.
content:
application/json:
schema:
$ref: '#/components/schemas/DataEnvelope'
'400':
description: Bad request.
content:
application/json:
schema:
$ref: '#/components/schemas/ErrorResponse'
'401':
description: Missing or invalid API key.
content:
application/json:
schema:
$ref: '#/components/schemas/ErrorResponse'
'404':
description: Object not found.
content:
application/json:
schema:
$ref: '#/components/schemas/ErrorResponse'
'429':
description: Rate limit or quota exceeded.
content:
application/json:
schema:
$ref: '#/components/schemas/ErrorResponse'
x-microcks-operation:
delay: 0
dispatcher: FALLBACK
/graphs/{id}/comments:
get:
tags:
- Threat Graphs
deprecated: false
description: 'This endpoint returns the comments posted in a given graph. Check [Graph comments relationship page](https://gtidocs.virustotal.com/reference/graph-comments) to know more about the returned
object.
'
operationId: getGraphComments
parameters:
- description: A 65 char length id which uniquely identify the graph.
in: path
name: id
required: true
schema:
type: string
- description: Maximum number of related objects to retrieve
in: query
name: limit
schema:
type: string
- description: Continuation cursor
in: query
name: cursor
schema:
format: int32
type: integer
security:
- VTApiKey: []
summary: VirusTotal Get Comments on a Graph
responses:
'200':
description: Successful VirusTotal API response.
content:
application/json:
schema:
$ref: '#/components/schemas/DataEnvelope'
'400':
description: Bad request.
content:
application/json:
schema:
$ref: '#/components/schemas/ErrorResponse'
'401':
description: Missing or invalid API key.
content:
application/json:
schema:
$ref: '#/components/schemas/ErrorResponse'
'404':
description: Object not found.
content:
application/json:
schema:
$ref: '#/components/schemas/ErrorResponse'
'429':
description: Rate limit or quota exceeded.
content:
application/json:
schema:
$ref: '#/components/schemas/ErrorResponse'
x-microcks-operation:
delay: 0
dispatcher: FALLBACK
post:
tags:
- Threat Graphs
deprecated: false
description: VirusTotal Add a Comment to a Graph
operationId: postGraphsComments
parameters:
- description: A 65 char length id which uniquely identify the graph.
in: path
name: id
required: true
schema:
type: string
requestBody:
content:
application/json:
schema:
properties:
data:
default: '{"type": "comment", "attributes": {"text": "test"}}'
description: A comment object.
format: json
type: string
required:
- data
type: object
security:
- VTApiKey: []
summary: VirusTotal Add a Comment to a Graph
responses:
'200':
description: Successful VirusTotal API response.
content:
application/json:
schema:
$ref: '#/components/schemas/DataEnvelope'
'400':
description: Bad request.
content:
application/json:
schema:
$ref: '#/components/schemas/ErrorResponse'
'401':
description: Missing or invalid API key.
content:
application/json:
schema:
$ref: '#/components/schemas/ErrorResponse'
'404':
description: Object not found.
content:
application/json:
schema:
$ref: '#/components/schemas/ErrorResponse'
'429':
description: Rate limit or quota exceeded.
content:
application/json:
schema:
$ref: '#/components/schemas/ErrorResponse'
x-microcks-operation:
delay: 0
dispatcher: FALLBACK
/graphs/{id}/relationships/{relationship}:
get:
tags:
- Threat Graphs
deprecated: false
description: 'This endpoint is the same as [/graphs/{id}/{relationship}](https://gtidocs.virustotal.com/reference/graphs-relationships) except it returns just the related object''s IDs (and context
attributes, if any) instead of returning all attributes.
'
operationId: graphsRelationshipsIds
parameters:
- description: A 65 char length id which uniquely identify the graph.
in: path
name: id
required: true
schema:
type: string
- description: Relationship name (see [table](ref:graph-object#relationships))
in: path
name: relationship
required: true
schema:
type: string
- description: Maximum number of related objects to retrieve
in: query
name: limit
schema:
type: string
- description: Continuation cursor
in: query
name: cursor
schema:
format: int32
type: integer
responses:
'200':
content:
text/plain:
examples:
Result:
value: ''
description: '200'
'400':
description: Bad request.
content:
application/json:
schema:
$ref: '#/components/schemas/ErrorResponse'
'401':
description: Missing or invalid API key.
content:
application/json:
schema:
$ref: '#/components/schemas/ErrorResponse'
'404':
description: Object not found.
content:
application/json:
schema:
$ref: '#/components/schemas/ErrorResponse'
'429':
description: Rate limit or quota exceeded.
content:
application/json:
schema:
$ref: '#/components/schemas/ErrorResponse'
security:
- VTApiKey: []
summary: VirusTotal Get Object Descriptors Related to a Graph
x-microcks-operation:
delay: 0
dispatcher: FALLBACK
/graphs/{id}/{relationship}:
get:
tags:
- Threat Graphs
deprecated: false
description: "Graph objects have number of relationships to other objects. As mentioned in the [Relationships](https://gtidocs.virustotal.com/reference/relationships) section, those related objects\
\ can be retrieved by sending `GET` requests to the relationship URL. \n\nSome relationships are accesible only to users who have access to Google Threat Intelligence.\n\nThe relationships supported\
\ by graph objects are documented in the [Graph](https://gtidocs.virustotal.com/reference/graph-object) API object page.\n\n```json Response example for owner\n{\n \"data\": {\n \"attributes\"\
: {\n \"first_name\": \"Richard\",\n \"last_name\": \"Hendricks\",\n \"profile_phrase\": \"CEO of Pied Piper\",\n \"reputation\": 1,\n \"status\"\
: \"active\",\n \"user_since\": 1528111032\n },\n \"id\": \"hendricks\",\n \"links\": {\n \"self\": \"https://www.virustotal.com/api/v3/users/hendricks\"\
\n },\n \"type\": \"user\"\n },\n \"links\": {\n \"self\": \"https://www.virustotal.com/api/v3/graphs/g510b3e01190b9e6001f7ed7d14015558b11ca9d3e87367b6b809bbb402645bf2/owner\"\
\n }\n}\n```\n"
operationId: graphsRelationships
parameters:
- description: A 65 char length id which uniquely identify the graph.
in: path
name: id
required: true
schema:
type: string
- description: Relationship name (see [table](ref:graph-object#relationships))
in: path
name: relationship
required: true
schema:
type: string
- description: Maximum number of related objects to retrieve
in: query
name: limit
schema:
type: string
- description: Continuation cursor
in: query
name: cursor
schema:
format: int32
type: integer
responses:
'200':
content:
text/plain:
examples:
Result:
value: ''
description: '200'
'400':
description: Bad request.
content:
application/json:
schema:
$ref: '#/components/schemas/ErrorResponse'
'401':
description: Missing or invalid API key.
content:
application/json:
schema:
$ref: '#/components/schemas/ErrorResponse'
'404':
description: Object not found.
content:
application/json:
schema:
$ref: '#/components/schemas/ErrorResponse'
'429':
description: Rate limit or quota exceeded.
content:
application/json:
schema:
$ref: '#/components/schemas/ErrorResponse'
security:
- VTApiKey: []
summary: VirusTotal Get Objects Related to a Graph
x-microcks-operation:
delay: 0
dispatcher: FALLBACK
/graphs/{id}/relationships/editors:
get:
tags:
- Threat Graphs Permissions & ACL
deprecated: false
description: "This endpoint returns the users and groups that can edit the graph. The graph needs to be shared with them as `Editor` to appear here.\n\n```json Response example\n{\n \"data\": [\n\
\ {\n \"attributes\": {\n \"first_name\": \"Bertram\",\n \"last_name\": \"Gilfoyle\",\n \"profile_phrase\": \"\",\n \
\ \"reputation\": 1,\n \"status\": \"active\",\n \"user_since\": 1530008602\n },\n \"id\": \"gilfoyle\",\n \"links\": {\n \
\ \"self\": \"https://www.virustotal.com/api/v3/users/gilfoyle\"\n },\n \"type\": \"user\"\n }\n ],\n \"links\": {\n \"self\": \"https://www.virustotal.com/api/v3/graphs/g5598743d5f3c699f1c90e76c2c2d541d41f1b56bd8114c06d181ed3f60cfcada/editors?limit=10\"\
\n }\n}\n```\n"
operationId: graphsEditors
parameters:
- description: A 65 char length id which uniquely identify the graph.
in: path
name: id
required: true
schema:
type: string
- description: Maximum number of related objects to retrieve
in: query
name: limit
schema:
type: string
- description: Continuation cursor
in: query
name: cursor
schema:
format: int32
type: integer
security:
- VTApiKey: []
summary: VirusTotal Get Users and Groups That Can Edit a Graph
responses:
'200':
description: Successful VirusTotal API response.
content:
application/json:
schema:
$ref: '#/components/schemas/DataEnvelope'
'400':
description: Bad request.
content:
application/json:
schema:
$ref: '#/components/schemas/ErrorResponse'
'401':
description: Missing or invalid API key.
content:
application/json:
schema:
$ref: '#/components/schemas/ErrorResponse'
'404':
description: Object not found.
content:
application/json:
schema:
$ref: '#/components/schemas/ErrorResponse'
'429':
description: Rate limit or quota exceeded.
content:
application/json:
schema:
$ref: '#/components/schemas/ErrorResponse'
x-microcks-operation:
delay: 0
dispatcher: FALLBACK
post:
tags:
- Threat Graphs Permissions & ACL
deprecated: false
description: "This endpoint adds a user or groups as a graph editor. \n\n```json Response example\n{\n \"data\": [\n {\n \"attributes\": {\n \"first_name\": \"\
Bertram\",\n \"last_name\": \"Gilfoyle\",\n \"profile_phrase\": \"\",\n \"reputation\": 1,\n \"status\": \"active\",\n \
\ \"user_since\": 1530008602\n },\n \"id\": \"gilfoyle\",\n \"links\": {\n \"self\": \"https://www.virustotal.com/api/v3/users/gilfoyle\"\n \
\ },\n \"type\": \"user\"\n }\n ],\n \"links\": {\n \"self\": \"https://www.virustotal.com/api/v3/graphs/g5598743d5f3c699f1c90e76c2c2d541d41f1b56bd8114c06d181ed3f60cfcada/editors?limit=10\"\
\n }\n}\n```\n"
operationId: graphsAddEditor
parameters:
- description: A 65 char length id which uniquely identify the graph.
in: path
name: id
required: true
schema:
type: string
security:
- VTApiKey: []
summary: VirusTotal Grant Users and Groups Permission to Edit a Graph
responses:
'200':
description: Successful VirusTotal API response.
content:
application/json:
schema:
$ref: '#/components/schemas/DataEnvelope'
'400':
description: Bad request.
content:
application/json:
schema:
$ref: '#/components/schemas/ErrorResponse'
'401':
description: Missing or invalid API key.
content:
application/json:
schema:
$ref: '#/components/schemas/ErrorResponse'
'404':
description: Object not found.
content:
application/json:
schema:
$ref: '#/components/schemas/ErrorResponse'
'429':
description: Rate limit or quota exceeded.
content:
application/json:
schema:
$ref: '#/components/schemas/ErrorResponse'
x-microcks-operation:
delay: 0
dispatcher: FALLBACK
/graphs/{id}/relationships/editors/{user_or_group_id}:
delete:
tags:
- Threat Graphs Permissions & ACL
deprecated: false
description: VirusTotal Revoke Edit Graph Permissions from a User or Group
operationId: graphsDeleteEditor
parameters:
- description: A 65 char length id which uniquely identify the graph.
in: path
name: id
required: true
schema:
type: string
- description: User or group ID
in: path
name: user_or_group_id
required: true
schema:
type: string
security:
- VTApiKey: []
summary: VirusTotal Revoke Edit Graph Permissions from a User or Group
responses:
'200':
description: Successful VirusTotal API response.
content:
application/json:
schema:
$ref: '#/components/schemas/DataEnvelope'
'400':
description: Bad request.
content:
application/json:
schema:
$ref: '#/components/schemas/ErrorResponse'
'401':
description: Missing or invalid API key.
content:
application/json:
schema:
$ref: '#/components/schemas/ErrorResponse'
'404':
description: Object not found.
content:
application/json:
schema:
$ref: '#/components/schemas/ErrorResponse'
'429':
description: Rate limit or quota exceeded.
content:
application/json:
schema:
$ref: '#/components/schemas/ErrorResponse'
x-microcks-operation:
delay: 0
dispatcher: FALLBACK
get:
tags:
- Threat Graphs Permissions & ACL
deprecated: false
description: "This endpoint returns true if the user or group has `Editor` access to the graph.\n\n```json Response example\n{\n \"data\": false\n}\n```\n"
operationId: graphsCheckEditor
parameters:
- description: A 65 char length id which uniquely identify the graph.
in: path
name: id
required: true
schema:
type: string
- description: User or group ID
in: path
name: user_or_group_id
required: true
schema:
type: string
security:
- VTApiKey: []
summary: VirusTotal Check if a User or Group Can Edit a Graph
responses:
'200':
description: Successful VirusTotal API response.
content:
application/json:
schema:
$ref: '#/components/schemas/DataEnvelope'
'400':
description: Bad request.
content:
application/json:
schema:
$ref: '#/components/schemas/ErrorResponse'
'401':
description: Missing or invalid API key.
content:
application/json:
schema:
$ref: '#/components/schemas/ErrorResponse'
'404':
description: Object not found.
content:
application/json:
schema:
$ref: '#/components/schemas/ErrorResponse'
'429':
description: Rate limit or quota exceeded.
content:
application/json:
schema:
$ref: '#/components/schemas/ErrorResponse'
x-microcks-operation:
delay: 0
dispatcher: FALLBACK
/graphs/{id}/relationships/viewers/{user_or_group_id}:
delete:
tags:
- Threat Graphs Permissions & ACL
deprecated: false
description: VirusTotal Revoke View Permission from a User or Group
operationId: graphsDeleteViewer
parameters:
- description: A 65 char length id which uniquely identify the graph.
in: path
name: id
required: true
schema:
type: string
- description: User or group ID
in: path
name: user_or_group_id
required: true
schema:
type: string
security:
- VTApiKey: []
summary: VirusTotal Revoke View Permission from a User or Group
responses:
'200':
description: Successful VirusTotal API response.
content:
application/json:
schema:
$ref: '#/components/schemas/DataEnvelope'
'400':
description: Bad request.
content:
application/json:
schema:
$ref: '#/components/schemas/ErrorResponse'
'401':
description: Missing or invalid API key.
content:
application/json:
schema:
$ref: '#/components/schemas/ErrorResponse'
'404':
description: Object not found.
content:
application/json:
schema:
$ref: '#/components/schemas/ErrorResponse'
'429':
description: Rate limit or quota exceeded.
content:
application/json:
schema:
$ref: '#/components/schemas/ErrorResponse'
x-microcks-operation:
delay: 0
dispatcher: FALLBACK
get:
tags:
- Threat Graphs Permissions & ACL
deprecated: false
description: 'This endpoint returns true if the user has `Viewer` access to the graph.
'
operationId: graphsCheckViewer
parameters:
- description: A 65 char length id which uniquely identify the graph.
in: path
name: id
required: true
schema:
type: string
- description: User or group ID
in: path
name: user_or_group_id
required: true
schema:
type: string
responses:
'200':
content:
application/json:
examples:
Result:
value: "{\n \"data\": true\n}"
schema:
properties:
data:
default: true
type: boolean
type: object
description: '200'
'400':
description: Bad request.
content:
application/json:
schema:
$ref: '#/components/schemas/ErrorResponse'
'401':
description: Missing or invalid API key.
content:
application/json:
schema:
$ref: '#/components/schemas/ErrorResponse'
'404':
description: Object not found.
content:
application/json:
schema:
$ref: '#/components/schemas/ErrorResponse'
'429':
description: Rate limit or quota exceeded.
content:
application/json:
schema:
$ref: '#/components/schemas/ErrorResponse'
security:
- VTApiKey: []
summary: VirusTotal Check if a User or Group Can View a Graph
x-microcks-operation:
delay: 0
dispatcher: FALLBACK
/graphs/{id}/relationships/viewers:
get:
tags:
- Threat Graphs Permissions & ACL
deprecated: false
description: "This endpoint returns the users that can view the graph. The graph needs to be shared with them as `Viewer` to appear here.\n\n```json Response example\n{\n \"data\": [\n {\n\
\ \"attributes\": {\n \"first_name\": \"Bertram\",\n \"last_name\": \"Gilfoyle\",\n \"profile_phrase\": \"\",\n \"reputation\"\
: 1,\n \"status\": \"active\",\n \"user_since\": 1530008602\n },\n \"id\": \"gilfoyle\",\n \"links\": {\n \"self\":\
\ \"https://www.virustotal.com/api/v3/users/gilfoyle\"\n },\n \"type\": \"user\"\n }\n ],\n \"links\": {\n \"self\": \"https://www.virustotal.com/api/v3/graphs/g5598743d5f3c699f1c90e76c2c2d541d41f1b56bd8114c06d181ed3f60cfcada/viewers?limit=10\"\
\n }\n}\n```\n"
operationId: graphsViewers
parameters:
- description: A 65 char length id which uniquely identify the graph.
in: path
name: id
required: true
schema:
type: string
- description: Maximum number of related objects to retrieve
in: query
name: limit
schema:
type: string
- description: Continuation cursor
in: query
name: cursor
schema:
format: int32
type: integer
security:
- VTApiKey: []
summary: VirusTotal Get Users and Groups That Can View a Graph
responses:
'200':
description: Successful VirusTotal API response.
content:
application/json:
schema:
$ref: '#/components/schemas/DataEnvelope'
'400':
description: Bad request.
content:
application/json:
schema:
$ref: '#/components/schemas/ErrorResponse'
'401':
description: Missing or invalid API key.
content:
application/json:
schema:
$ref: '#/components/schemas/ErrorResponse'
'404':
description: Object not found.
content:
application/json:
schema:
$ref: '#/components/schemas/ErrorResponse'
'429':
description: Rate limit or quota exceeded.
content:
application/json:
schema:
$ref: '#/components/schemas/ErrorResponse'
x-microcks-operation:
delay: 0
dispatcher: FALLBACK
post:
tags:
- Threat Graphs Permissions & ACL
deprecated: false
description: "This endpoint adds a user or group as a graph viewer. \n\n```json Response example\n{\n \"data\": [\n {\n \"attributes\": {\n \"first_name\": \"Bertram\"\
,\n \"last_name\": \"Gilfoyle\",\n \"profile_phrase\": \"\",\n \"reputation\": 1,\n \"status\": \"active\",\n \"user_since\"\
: 1530008602\n },\n \"id\": \"gilfoyle\",\n \"links\": {\n \"self\": \"https://www.virustotal.com/api/v3/users/gilfoyle\"\n },\n \
\ \"type\": \"user\"\n }\n ],\n \"links\": {\n \"self\": \"https://www.virustotal.com/api/v3/graphs/g5598743d5f3c699f1c90e76c2c2d541d41f1b56bd8114c06d181ed3f60cfcada/viewers?limit=10\"\
\n }\n}\n```\n"
operationId: graphsAddViewer
parameters:
- description: A 65 char length id which uniquely identify the graph.
in: path
name: id
required: true
schema:
type: string
security:
- VTApiKey: []
summary: VirusTotal Grant Users and Groups Permission to See a Graph
responses:
'200':
description: Successful VirusTotal API response.
content:
application/json:
schema:
$ref: '#/components/schemas/DataEnvelope'
'400':
description: Bad request.
content:
application/json:
schema:
$ref: '#/components/schemas/ErrorResponse'
'401':
description: Missing or invalid API key.
content:
application/json:
schema:
$ref: '#/components/schemas/ErrorResponse'
'404':
description: Object not found.
content:
application/json:
schema:
$ref: '#/components/schemas/ErrorResponse'
'429':
description: Rate limit or quota exceeded.
content:
application/json:
schema:
$ref: '#/components/schemas/ErrorResponse'
x-microcks-operation:
delay: 0
dispatcher: FALLBACK
components:
securitySchemes:
VTApiKey:
type: apiKey
in: header
name: x-apikey
description: Personal VirusTotal / GTI API key. Found in the user menu of your VirusTotal account.
schemas:
Error:
type: object
description: Standard VirusTotal API error envelope.
properties:
code:
type: string
description: Machine-readable error code.
example: NotFoundError
message:
type: string
description: Human-readable error message.
example: Resource not found
required:
- code
- message
ErrorResponse:
type: object
description: Error response envelope returned by the VirusTotal API.
properties:
error:
$ref: '#/components/schemas/Error'
required:
- error
DataEnvelope:
type: object
description: Successful response envelope. The shape of `data` depends on the endpoint.
properties:
data:
description: Endpoint-specific payload — usually a VirusTotal object or list of objects.
example: {}
meta:
type: object
description: Optional metadata about the response (cursors, counts, etc.).
additionalProperties: true
links:
type: object
description: Optional pagination links.
properties:
next:
type: string
format: uri
description: URL to the next page of results.
self:
type: string
format: uri
description: URL of the current page.
additionalProperties: true
required:
- data
Object:
type: object
description: Base shape of a VirusTotal object (file, url, domain, ip_address, comment, vote, graph, collection, analysis, etc.).
properties:
id:
type: string
description: Object identifier. For files this is the SHA-256; for URLs the base64url of the URL; for domains the domain; for IPs the address.
example: 44d88612fea8a8f36de82e1278abb02f
type:
type: string
description: Object type discriminator.
example: file
links:
type: object
description: Hypermedia links for this object.
properties:
self:
type: string
format: uri
description: Canonical URL for this object.
additionalProperties: true
attributes:
type: object
description: Type-specific attributes payload.
additionalProperties: true
context_attributes:
type: object
description: Optional context-specific attributes when the object is returned as part of a relationship.
additionalProperties: true
relationships:
type: object
description: Pre-expanded relationships to other VirusTotal objects, keyed by relationship name.
additionalProperties: true
required:
- id
- type