Recall - GNQL Over Time
What is it?
Recall is a time-series capability for GNQL that enables you to query GreyNoise data over a specific historical time range, rather than just the current 90-day aggregated view provided by standard GNQL results.
With Recall, you can answer questions like:
- “What did GreyNoise observe for this IP last week vs. last month?”
- “When did a certain tag/behavior show up?”
- “How did the volume of matching IPs change over time for a GNQL query?”
Who is it for?
Recall is for teams who want to do historical analysis or build trend-based workflows, including:
- SOC / Threat Intel teams doing investigation and needing historical context (e.g., “was this IP active during the incident window?”)
- Detection engineering teams tracking how scanning/exploitation behavior evolves over time
- Security data/platform teams building dashboards, enrichment pipelines, or alerting logic based on changes over time (not just “what’s true now”)
Who has access?
- The Recall APIs are currently available for any users with a Platform (Standard / Advanced / Elite) license
- The Platform license entitlements define the Recall API data reached:
- Standard Platform: 10 Day Lookup
- Advanced Platform: 30 Day Lookup
- Elite Platform: 90 Day Lookup
- Data fields and query terms are determined by the Internet Scanner Intelligence Module (Triage / Investigate / Hunt)
How does it work?
Recall provides two endpoints:
1) Recall Data API
Endpoint: /v3/gnql/timeseries
Use this when you want to retrieve the actual hourly records for the IPs that match your GNQL query.
You provide:
query(required): the GNQL query to runstart(required): start of the time rangeend(required): end of the time rangelimit(optional): how many IPs (total) to returnoffset(optional): pagination
You get back:
- A JSON object keyed by hour (
yyyy-mm-dd-hh) - Each hour contains a list of records with:
ipinternet_scanner_intelligence(the GreyNoise context for that IP at that hour)
Example request
curl --location'https://api.greynoise.io/v3/gnql/timeseries?query=ip%3A212.18.104.107&start=2025-09-08T06%3A00%3A00Z&end=2025-10-23T12%3A00%3A00Z' \
--header'key: <key>'
2) Recall Stats API
Endpoint: /v3/gnql/timeseries/stats
Use this when you want a trend line rather than full records. For example, “how many unique IPs matched this query per hour/day?”
You provide:
query(required)start(required)end(required)interval(required):hourorday
You get back:
count: unique IPs across the entire time rangemin/max: minimum and maximum bucket countsdata: a list of{ date, count }for each hour/day bucket
Example request
curl --location'https://api.greynoise.io/v3/gnql/timeseries/stats?query=tags%3A*Scanner*&start=2025-08-08T06%3A00%3A00Z&end=2025-10-12T23%3A00%3A00Z&interval=day' \
--header'key: <key>'
Important note on GNQL syntax
Recall accepts a stricter subset of GNQL than the standard GNQL endpoint. This is intentional to avoid queries that behave differently than customers expect (especially around quoted strings + wildcards).
For example:
- ❌
tags:*"Palo Alto"* - ✅
tags:*Palo\ Alto*
Updated about 10 hours ago
