GreyNoise Intelligence Callback API

The Callback API from GreyNoise Intelligence — 4 operation(s) for callback.

Documentation

Specifications

Other Resources

🔗
GraphQL
https://raw.githubusercontent.com/api-evangelist/greynoise/refs/heads/main/graphql/greynoise-graphql.md
🔗
APIsJSON
https://raw.githubusercontent.com/api-evangelist/greynoise/refs/heads/main/apis.yml
🔗
Arazzo
https://raw.githubusercontent.com/api-evangelist/greynoise/refs/heads/main/arazzo/greynoise-bulk-ip-triage-workflow.yml
🔗
Arazzo
https://raw.githubusercontent.com/api-evangelist/greynoise/refs/heads/main/arazzo/greynoise-community-classification-router-workflow.yml
🔗
Arazzo
https://raw.githubusercontent.com/api-evangelist/greynoise/refs/heads/main/arazzo/greynoise-community-deep-dive-workflow.yml
🔗
Arazzo
https://raw.githubusercontent.com/api-evangelist/greynoise/refs/heads/main/arazzo/greynoise-community-to-timeline-workflow.yml
🔗
Arazzo
https://raw.githubusercontent.com/api-evangelist/greynoise/refs/heads/main/arazzo/greynoise-cve-exposure-scan-workflow.yml
🔗
Arazzo
https://raw.githubusercontent.com/api-evangelist/greynoise/refs/heads/main/arazzo/greynoise-gnql-investigate-top-result-workflow.yml
🔗
Arazzo
https://raw.githubusercontent.com/api-evangelist/greynoise/refs/heads/main/arazzo/greynoise-gnql-stats-then-sample-workflow.yml
🔗
Arazzo
https://raw.githubusercontent.com/api-evangelist/greynoise/refs/heads/main/arazzo/greynoise-ip-context-timeline-workflow.yml
🔗
Arazzo
https://raw.githubusercontent.com/api-evangelist/greynoise/refs/heads/main/arazzo/greynoise-ip-quick-triage-workflow.yml
🔗
Arazzo
https://raw.githubusercontent.com/api-evangelist/greynoise/refs/heads/main/arazzo/greynoise-tag-hunt-to-context-workflow.yml

OpenAPI Specification

greynoise-callback-api-openapi.yml Raw ↑
openapi: 3.0.0
info:
  title: GreyNoise Callback API
  version: 3.0.0
  description: GreyNoise is a cybersecurity company that collects and analyzes Internet-wide scan and attack traffic. Use GreyNoise to contextualize existing alerts, filter false-positives, identify compromised devices, and track emerging threats.
  contact:
    email: hello@greynoise.io
  license:
    name: Proprietary
    url: https://www.greynoise.io/terms
servers:
- url: https://api.greynoise.io
  description: Production
security:
- APIKeyHeaderAuth: []
tags:
- name: Callback
paths:
  /v1/callback/export-ips:
    post:
      tags:
      - Callback
      summary: Export Callback IPs
      operationId: CallbackExportIPs
      description: 'Export callback IPs matching the given filters as a newline-delimited

        plain text list. Supports the same filter parameters as the List

        Callback IPs endpoint.

        '
      requestBody:
        required: false
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/CallbackFilterFields'
            examples:
              CallbackExportIPsRequestExample:
                summary: Default CallbackExportIPs request
                x-microcks-default: true
                value:
                  is_stage_1: false
                  is_stage_2: false
                  first_seen_after: '2026-05-01'
                  first_seen_before: '2026-05-01'
                  last_seen_after: '2026-05-01'
                  last_seen_before: '2026-05-01'
                  has_files: false
                  file_type: string
                  file_name: Google Public DNS
                  file_hash: 795bc7ce13f60d61e9ac03611dd36d90
                  scanner_ips:
                  - string
                  ips:
                  - string
      responses:
        '200':
          description: OK - newline-delimited list of callback IPs.
          content:
            text/plain:
              schema:
                type: string
                example: '198.51.100.42

                  203.0.113.7

                  192.0.2.99

                  '
        '400':
          $ref: '#/components/responses/BadRequest'
        '401':
          $ref: '#/components/responses/Unauthorized'
        '403':
          $ref: '#/components/responses/Forbidden'
        '500':
          $ref: '#/components/responses/UnexpectedError'
      x-microcks-operation:
        delay: 0
        dispatcher: FALLBACK
  /v1/callback/ip/{ip}:
    get:
      tags:
      - Callback
      summary: Callback IP Lookup
      operationId: CallbackGetIP
      description: 'Retrieve detailed information about a specific callback IP, including

        attack stage, scanner associations, and downloaded malware files.

        '
      parameters:
      - name: ip
        in: path
        description: The callback IP address to look up.
        required: true
        schema:
          type: string
          example: 198.51.100.42
      responses:
        '200':
          description: OK - callback IP details returned.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/CallbackIPDetailResponse'
              examples:
                CallbackGetIP200Example:
                  summary: Default CallbackGetIP 200 response
                  x-microcks-default: true
                  value:
                    ip: 198.51.100.42
                    source_workspaces:
                    - GreyNoise
                    - UserWorkspace
                    is_stage_1: false
                    is_stage_2: false
                    first_seen: '2025-03-01T00:00:00Z'
                    last_seen: '2025-03-15T12:30:00Z'
                    scanner_ips:
                    - 203.0.113.7
                    - 192.0.2.99
                    scanner_count: 5
                    file_count: 3
                    active_files: []
        '400':
          $ref: '#/components/responses/BadRequest'
        '401':
          $ref: '#/components/responses/Unauthorized'
        '403':
          $ref: '#/components/responses/Forbidden'
        '404':
          $ref: '#/components/responses/NotFound'
        '500':
          $ref: '#/components/responses/UnexpectedError'
      x-microcks-operation:
        delay: 0
        dispatcher: FALLBACK
  /v1/callback/ips:
    post:
      tags:
      - Callback
      summary: List Callback IPs
      operationId: CallbackListIPs
      description: 'Retrieve a paginated list of callback IPs with filtering by attack

        stage, date ranges, file attributes, and scanner associations.

        '
      requestBody:
        required: false
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/CallbackListIPsRequest'
            examples:
              CallbackListIPsRequestExample:
                summary: Default CallbackListIPs request
                x-microcks-default: true
                value:
                  is_stage_1: false
                  is_stage_2: false
                  first_seen_after: '2026-05-01'
                  first_seen_before: '2026-05-01'
                  last_seen_after: '2026-05-01'
                  last_seen_before: '2026-05-01'
                  has_files: false
                  file_type: string
                  file_name: Google Public DNS
                  file_hash: 795bc7ce13f60d61e9ac03611dd36d90
                  scanner_ips:
                  - string
                  ips:
                  - string
                  page: 100
                  page_size: 100
      responses:
        '200':
          description: OK - paginated list of callback IPs returned.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/CallbackListIPsResponse'
              examples:
                CallbackListIPs200Example:
                  summary: Default CallbackListIPs 200 response
                  x-microcks-default: true
                  value:
                    items: []
                    total: 142
                    page: 0
                    page_size: 20
        '400':
          $ref: '#/components/responses/BadRequest'
        '401':
          $ref: '#/components/responses/Unauthorized'
        '403':
          $ref: '#/components/responses/Forbidden'
        '500':
          $ref: '#/components/responses/UnexpectedError'
      x-microcks-operation:
        delay: 0
        dispatcher: FALLBACK
  /v1/callback/overview:
    post:
      tags:
      - Callback
      summary: Callback Overview Statistics
      operationId: CallbackOverview
      description: 'Retrieve aggregate statistics for callback IPs including counts by

        attack stage, file analysis status, scanner associations, and top

        threat names.

        '
      requestBody:
        required: false
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/CallbackFilterFields'
            examples:
              CallbackOverviewRequestExample:
                summary: Default CallbackOverview request
                x-microcks-default: true
                value:
                  is_stage_1: false
                  is_stage_2: false
                  first_seen_after: '2026-05-01'
                  first_seen_before: '2026-05-01'
                  last_seen_after: '2026-05-01'
                  last_seen_before: '2026-05-01'
                  has_files: false
                  file_type: string
                  file_name: Google Public DNS
                  file_hash: 795bc7ce13f60d61e9ac03611dd36d90
                  scanner_ips:
                  - string
                  ips:
                  - string
      responses:
        '200':
          description: OK - overview statistics returned.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/CallbackOverviewResponse'
              examples:
                CallbackOverview200Example:
                  summary: Default CallbackOverview 200 response
                  x-microcks-default: true
                  value:
                    total_ips: 142
                    stage_1_ips: 98
                    stage_2_ips: 44
                    total_files: 230
                    files_with_vt: 180
                    files_without_vt: 50
                    total_cross_refs: 312
                    total_scanner_links: 456
                    ips_with_files: 110
                    ips_without_files: 32
                    ips_with_scanners: 130
                    ips_without_scanners: 12
                    distinct_scanners: 89
                    top_threat_names: []
        '400':
          $ref: '#/components/responses/BadRequest'
        '401':
          $ref: '#/components/responses/Unauthorized'
        '403':
          $ref: '#/components/responses/Forbidden'
        '500':
          $ref: '#/components/responses/UnexpectedError'
      x-microcks-operation:
        delay: 0
        dispatcher: FALLBACK
components:
  schemas:
    CallbackFileSummary:
      type: object
      description: Lightweight file reference returned with IP list results.
      properties:
        sha256:
          type: string
          description: SHA-256 hash of the file.
          example: string
        file_name:
          type: string
          description: Original file name.
          example: Google Public DNS
        type:
          type: string
          description: File MIME type.
          example: string
        vt_threat_name:
          type: string
          description: VirusTotal threat name.
          example: Google Public DNS
        vt_detection_count:
          type: integer
          description: Number of VirusTotal engines that flagged the file.
          example: 42
    CallbackOverviewResponse:
      type: object
      description: Aggregate statistics for callback IPs matching the given filters.
      properties:
        total_ips:
          type: integer
          description: Total number of callback IPs.
          example: 142
        stage_1_ips:
          type: integer
          description: Number of stage 1 (initial payload delivery) IPs.
          example: 98
        stage_2_ips:
          type: integer
          description: Number of stage 2 (post-exploitation callback) IPs.
          example: 44
        total_files:
          type: integer
          description: Total number of associated malware files.
          example: 230
        files_with_vt:
          type: integer
          description: Files that have been analyzed by VirusTotal.
          example: 180
        files_without_vt:
          type: integer
          description: Files pending VirusTotal analysis.
          example: 50
        total_cross_refs:
          type: integer
          description: Total IP-to-file associations.
          example: 312
        total_scanner_links:
          type: integer
          description: Total scanner-to-callback-IP associations.
          example: 456
        ips_with_files:
          type: integer
          description: Number of IPs that have associated files.
          example: 110
        ips_without_files:
          type: integer
          description: Number of IPs with no associated files.
          example: 32
        ips_with_scanners:
          type: integer
          description: Number of IPs with known scanner associations.
          example: 130
        ips_without_scanners:
          type: integer
          description: Number of IPs with no known scanner associations.
          example: 12
        distinct_scanners:
          type: integer
          description: Total number of unique scanner IPs.
          example: 89
        top_threat_names:
          type: array
          items:
            $ref: '#/components/schemas/CallbackThreatNameStat'
          description: Top VirusTotal threat names by file count.
          example: []
    CallbackListIPsRequest:
      allOf:
      - $ref: '#/components/schemas/CallbackFilterFields'
      - type: object
        properties:
          page:
            type: integer
            minimum: 0
            default: 0
            description: Zero-indexed page number.
            example: 100
          page_size:
            type: integer
            minimum: 1
            maximum: 100
            default: 20
            description: Number of results per page (1-100).
            example: 100
    CallbackIPSummary:
      type: object
      description: Summary representation of a callback IP in list results.
      properties:
        ip:
          type: string
          example: 198.51.100.42
        source_workspaces:
          type: array
          items:
            type: string
          example:
          - GreyNoise
        is_stage_1:
          type: boolean
          example: false
        is_stage_2:
          type: boolean
          example: false
        first_seen:
          type: string
          nullable: true
          example: '2025-12-01'
        last_seen:
          type: string
          nullable: true
          example: '2026-05-01'
        scanner_ips:
          type: array
          items:
            type: string
          example:
          - string
        scanner_count:
          type: integer
          example: 42
        file_count:
          type: integer
          example: 42
        files:
          type: array
          items:
            $ref: '#/components/schemas/CallbackFileSummary'
          description: Lightweight file references for this IP.
          example: []
    CallbackFilterFields:
      type: object
      description: Common filter fields for callback IP queries.
      properties:
        is_stage_1:
          type: boolean
          description: 'Filter by stage 1 status. true = file downloaded from this IP.

            '
          example: false
        is_stage_2:
          type: boolean
          description: 'Filter by stage 2 status. true = suspected C2 based on VT/sandbox analysis.

            '
          example: false
        first_seen_after:
          type: string
          format: date
          description: Only include IPs first seen after this date (YYYY-MM-DD).
          example: '2026-05-01'
        first_seen_before:
          type: string
          format: date
          description: Only include IPs first seen before this date (YYYY-MM-DD).
          example: '2026-05-01'
        last_seen_after:
          type: string
          format: date
          description: Only include IPs last seen after this date (YYYY-MM-DD).
          example: '2026-05-01'
        last_seen_before:
          type: string
          format: date
          description: Only include IPs last seen before this date (YYYY-MM-DD).
          example: '2026-05-01'
        has_files:
          type: boolean
          description: If true, only include IPs with associated malware files. If false, only IPs without files.
          example: false
        file_type:
          type: string
          description: Filter by file MIME type (e.g. "application/x-executable").
          example: string
        file_name:
          type: string
          description: Filter by file name substring match.
          example: Google Public DNS
        file_hash:
          type: string
          description: Filter by file SHA256 hash.
          example: 795bc7ce13f60d61e9ac03611dd36d90
        scanner_ips:
          type: array
          items:
            type: string
          description: Filter to IPs associated with these scanner IPs.
          example:
          - string
        ips:
          type: array
          items:
            type: string
          description: Filter to this specific set of callback IPs.
          example:
          - string
    CallbackFileResponse:
      type: object
      description: Malware file associated with a callback IP.
      properties:
        sha256:
          type: string
          description: SHA-256 hash of the file.
          example: e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855
        md5:
          type: string
          description: MD5 hash of the file.
          example: 795bc7ce13f60d61e9ac03611dd36d90
        sha1:
          type: string
          description: SHA-1 hash of the file.
          example: string
        threat_name:
          type: string
          description: VirusTotal threat name, if available.
          example: Trojan.GenericKD.46542
        vt_detection_count:
          type: integer
          description: Number of VirusTotal engines that flagged the file as malicious.
          example: 42
        vt_engine_count:
          type: integer
          description: Total number of VirusTotal engines that scanned the file.
          example: 71
        file_name:
          type: string
          description: Original file name, if known.
          example: payload.bin
        size:
          type: integer
          format: int64
          description: File size in bytes.
          example: 24576
        type:
          type: string
          description: File MIME type.
          example: application/x-executable
    CallbackThreatNameStat:
      type: object
      properties:
        threat_name:
          type: string
          description: VirusTotal threat name.
          example: Trojan.GenericKD.46542
        file_count:
          type: integer
          description: Number of files with this threat name.
          example: 12
        ip_count:
          type: integer
          description: Number of IPs associated with files of this threat name.
          example: 8
    CallbackIPDetailResponse:
      type: object
      description: Detailed information about a single callback IP.
      properties:
        ip:
          type: string
          description: The callback IP address.
          example: 198.51.100.42
        source_workspaces:
          type: array
          items:
            type: string
          description: 'Labeled workspace sources where this IP was observed.

            Values are "GreyNoise", "UserWorkspace", or "Community".

            '
          example:
          - GreyNoise
          - UserWorkspace
        is_stage_1:
          type: boolean
          description: Whether a file was successfully downloaded from this IP (stage 1).
          example: false
        is_stage_2:
          type: boolean
          description: Whether this IP is suspected C2 based on VT/sandbox analysis (stage 2).
          example: false
        first_seen:
          type: string
          nullable: true
          description: ISO 8601 timestamp of when this IP was first observed.
          example: '2025-03-01T00:00:00Z'
        last_seen:
          type: string
          nullable: true
          description: ISO 8601 timestamp of when this IP was most recently observed.
          example: '2025-03-15T12:30:00Z'
        scanner_ips:
          type: array
          items:
            type: string
          description: Scanner IPs that delivered payloads referencing this callback IP.
          example:
          - 203.0.113.7
          - 192.0.2.99
        scanner_count:
          type: integer
          description: Number of distinct scanners associated with this IP.
          example: 5
        file_count:
          type: integer
          description: Number of malware files associated with this IP.
          example: 3
        active_files:
          type: array
          items:
            $ref: '#/components/schemas/CallbackFileResponse'
          description: Malware files associated with this callback IP.
          example: []
    CallbackListIPsResponse:
      type: object
      description: Paginated list of callback IPs.
      properties:
        items:
          type: array
          items:
            $ref: '#/components/schemas/CallbackIPSummary'
          example: []
        total:
          type: integer
          description: Total number of matching callback IPs.
          example: 142
        page:
          type: integer
          description: Current page number (zero-indexed).
          example: 0
        page_size:
          type: integer
          description: Number of results per page.
          example: 20
    Error:
      type: object
      properties:
        message:
          type: string
          example: Success
      required:
      - message
  responses:
    NotFound:
      description: Resource not found.
      content:
        application/json:
          schema:
            $ref: '#/components/schemas/Error'
          example:
            message: IP not found
    UnexpectedError:
      description: Unexpected error
      content:
        application/json:
          schema:
            $ref: '#/components/schemas/Error'
          example:
            message: Encountered error while performing request
    Forbidden:
      description: 'Forbidden - request is not authorized due to an invalid API key or plan limitations.

        If due to plan limitations, contact sales@greynoise.io to upgrade your plan and unlock full results.

        '
      content:
        application/json:
          schema:
            $ref: '#/components/schemas/Error'
          example:
            message: Forbidden
    Unauthorized:
      description: Unauthorized. Please check your API key.
      content:
        application/json:
          schema:
            $ref: '#/components/schemas/Error'
          example:
            message: Unauthorized
    BadRequest:
      description: 'Bad request - request syntax is invalid for the specified endpoint.

        Verify request syntax and try again.

        '
      content:
        application/json:
          schema:
            $ref: '#/components/schemas/Error'
          example:
            message: Invalid parameter
  securitySchemes:
    APIKeyHeaderAuth:
      type: apiKey
      in: header
      name: key
      description: GreyNoise API key passed via the 'key' HTTP header.