GreyNoise Intelligence · Arazzo Workflow

GreyNoise Tag Hunt To Context

Version 1.0.0

Resolve an activity tag, hunt IPs carrying it, then context the top hit.

1 workflow 3 source APIs 1 provider
View Spec View on GitHub SecurityThreat IntelligenceCybersecurityIP ReputationVulnerability ManagementNetwork TelemetrySOC AutomationPublic APIsArazzoWorkflows

Provider

greynoise

Workflows

tag-hunt-to-context
Resolve a tag slug, GNQL-hunt it, then context the first matching IP.
Lists tags by name to resolve a slug, queries GNQL for IPs tagged with it, and pulls the full IP context for the first matching IP.
3 steps inputs: apiKey, size, tagName outputs: classification, count, firstIp, slug
1
resolveTag
List tags filtered by name to resolve the canonical tag slug and metadata.
2
huntTag
Run a GNQL query for IP addresses carrying the resolved tag slug.
3
contextFirst
Retrieve the full IP context for the first IP carrying the tag, including metadata, classification, associated actor, and raw scan data.

Source API Descriptions

Arazzo Workflow Specification

Raw ↑
arazzo: 1.0.1
info:
  title: GreyNoise Tag Hunt To Context
  summary: Resolve an activity tag, hunt IPs carrying it, then context the top hit.
  description: >-
    Turns a human-friendly tag name into a concrete investigation. The workflow
    first lists matching tags to resolve a canonical tag slug, branches on
    whether any tag matched, then runs a GNQL query for IPs carrying that tag
    and finally retrieves the full IP context for the first matching IP. Every
    step spells out its request inline so the flow can be read and executed
    without opening the underlying OpenAPI description.
  version: 1.0.0
sourceDescriptions:
- name: gnqlApi
  url: ../openapi/greynoise-gnql-api-openapi.yml
  type: openapi
- name: ipLookupApi
  url: ../openapi/greynoise-ip-lookup-api-openapi.yml
  type: openapi
- name: tagsApi
  url: ../openapi/greynoise-tags-api-openapi.yml
  type: openapi
workflows:
- workflowId: tag-hunt-to-context
  summary: Resolve a tag slug, GNQL-hunt it, then context the first matching IP.
  description: >-
    Lists tags by name to resolve a slug, queries GNQL for IPs tagged with it,
    and pulls the full IP context for the first matching IP.
  inputs:
    type: object
    required:
    - apiKey
    - tagName
    properties:
      apiKey:
        type: string
        description: GreyNoise API key passed via the 'key' HTTP header.
      tagName:
        type: string
        description: The tag name to resolve (partial match, e.g. Mirai).
      size:
        type: integer
        description: Number of results per page in the GNQL hunt step.
        default: 10
  steps:
  - stepId: resolveTag
    description: >-
      List tags filtered by name to resolve the canonical tag slug and metadata.
    operationId: listTags
    parameters:
    - name: key
      in: header
      value: $inputs.apiKey
    - name: name
      in: query
      value: $inputs.tagName
    successCriteria:
    - condition: $statusCode == 200
    outputs:
      slug: $response.body#/tags/0/slug
      tagId: $response.body#/tags/0/id
    onSuccess:
    - name: tagFound
      type: goto
      stepId: huntTag
      criteria:
      - context: $response.body
        condition: $.tags.length > 0
        type: jsonpath
    - name: noTag
      type: end
      criteria:
      - context: $response.body
        condition: $.tags.length == 0
        type: jsonpath
  - stepId: huntTag
    description: >-
      Run a GNQL query for IP addresses carrying the resolved tag slug.
    operationId: gnqlV3Query
    parameters:
    - name: key
      in: header
      value: $inputs.apiKey
    - name: query
      in: query
      value: "tags:$steps.resolveTag.outputs.slug"
    - name: size
      in: query
      value: $inputs.size
    successCriteria:
    - condition: $statusCode == 200
    outputs:
      count: $response.body#/request_metadata/count
      firstIp: $response.body#/data/0/ip
    onSuccess:
    - name: haveHits
      type: goto
      stepId: contextFirst
      criteria:
      - context: $response.body
        condition: $.data.length > 0
        type: jsonpath
    - name: noHits
      type: end
      criteria:
      - context: $response.body
        condition: $.data.length == 0
        type: jsonpath
  - stepId: contextFirst
    description: >-
      Retrieve the full IP context for the first IP carrying the tag, including
      metadata, classification, associated actor, and raw scan data.
    operationId: V3IP
    parameters:
    - name: key
      in: header
      value: $inputs.apiKey
    - name: ip
      in: path
      value: $steps.huntTag.outputs.firstIp
    - name: quick
      in: query
      value: false
    successCriteria:
    - condition: $statusCode == 200
    outputs:
      ip: $response.body#/ip
      classification: $response.body#/internet_scanner_intelligence/classification
      actor: $response.body#/internet_scanner_intelligence/actor
  outputs:
    slug: $steps.resolveTag.outputs.slug
    count: $steps.huntTag.outputs.count
    firstIp: $steps.huntTag.outputs.firstIp
    classification: $steps.contextFirst.outputs.classification

Work with this as data

Every workflow here is available over the APIs.io API and to AI agents over MCP.

MCP server

One button, every client — Claude, Cursor, VS Code and the rest.

https://apis.io/mcp

Tools for arazzo workflows

4 MCP tools reach this
  • find_arazzoBrowse and filter every workflow in the catalog.
  • apis_io_searchSTART HERE — APIs, providers and tags for one query, each with its total.
  • resolveTurn a domain, URL or GitHub org into the provider it belongs to.
  • find_cohortsEvery scored population of providers in the catalog.
All 92 tools →

Call it yourself

curl for this page
This workflow
curl "https://apis.io/api/v1/arazzo/greynoise-tag-hunt-to-context-workflow"
All arazzo workflows
curl "https://apis.io/api/v1/arazzo?limit=25"

Discovery needs no key. Ratings and market analysis are Pro.

Get an API key

Free tier, no form to fill in. Signing in shares your email address with us — we store it to create your key and to recognise you if you sign in with another provider. See our Privacy Policy and Terms.

A second provider on the same verified email joins the account you already have.