VirusTotal API v3 - Threat Graphs

Create, share, edit, and search Threat Graphs — visualisations of how IoCs and threats relate. Includes the editor / viewer ACL surface for collaboration.

OpenAPI Specification

virustotal-threat-graphs-openapi.yml Raw ↑
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:<https://piedpiper.com/the-box/>\
        \                                  |\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:[[email protected]](mailto:[email protected])           |\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: <your API key>'\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: <your API key>'\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: <your API key>'\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: <your API key>'\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':
       

# --- truncated at 32 KB (55 KB total) ---
# Full source: https://raw.githubusercontent.com/api-evangelist/virustotal/refs/heads/main/openapi/virustotal-threat-graphs-openapi.yml