Web Risk API
googleapis · Analytics
Web Risk API API
Authentication
Sample Requests
Gets the full hashes that match the requested hash prefix. This is used after a hash prefix is looked up in a threatList and there is a match. The client side threatList only holds partial hashes so the client must query this method to determine if there is a full hash match of a threat.
Hover any highlighted part to learn what it does
curl -X GET "https://api.apis.guru/v2/specs/googleapis.com/webrisk/v1/v1/hashes:search?alt=json&key=YOUR_API_KEY&fields=example&$.xgafv=1&callback=example"aUser=example&hashPrefix=example&uploadType=example&oauth_token=example&prettyPrint=true&threatTypes=example&access_token=example&upload_protocol=example"
import requests
params = {
"alt": "json",
"key": "YOUR_API_KEY",
"fields": "example",
"$.xgafv": "1",
"callback": "example",
"quotaUser": "example",
"hashPrefix": "example",
"uploadType": "example",
"oauth_token": "example",
"prettyPrint": "true",
"threatTypes": "example",
"access_token": "example",
"upload_protocol": "example"
}
response = requests.get(
"https://api.apis.guru/v2/specs/googleapis.com/webrisk/v1/v1/hashes:search",
params=params,
)
print(response.json())const url = new URL('https://api.apis.guru/v2/specs/googleapis.com/webrisk/v1/v1/hashes:search');
url.searchParams.set('alt', 'json');
url.searchParams.set('key', 'YOUR_API_KEY');
url.searchParams.set('fields', 'example');
url.searchParams.set('$.xgafv', '1');
url.searchParams.set('callback', 'example');
url.searchParams.set('quotaUser', 'example');
url.searchParams.set('hashPrefix', 'example');
url.searchParams.set('uploadType', 'example');
url.searchParams.set('oauth_token', 'example');
url.searchParams.set('prettyPrint', 'true');
url.searchParams.set('threatTypes', 'example');
url.searchParams.set('access_token', 'example');
url.searchParams.set('upload_protocol', 'example');
const response = await fetch(url);
const data = await response.json();
console.log(data);package main
import (
"fmt"
"io"
"net/http"
"net/url"
)
func main() {
baseURL, _ := url.Parse("https://api.apis.guru/v2/specs/googleapis.com/webrisk/v1/v1/hashes:search")
q := baseURL.Query()
q.Set("alt", "json")
q.Set("key", "YOUR_API_KEY")
q.Set("fields", "example")
q.Set("$.xgafv", "1")
q.Set("callback", "example")
q.Set("quotaUser", "example")
q.Set("hashPrefix", "example")
q.Set("uploadType", "example")
q.Set("oauth_token", "example")
q.Set("prettyPrint", "true")
q.Set("threatTypes", "example")
q.Set("access_token", "example")
q.Set("upload_protocol", "example")
baseURL.RawQuery = q.Encode()
targetURL := baseURL.String()
req, _ := http.NewRequest("GET", targetURL, nil)
client := &http.Client{}
resp, _ := client.Do(req)
defer resp.Body.Close()
body, _ := io.ReadAll(resp.Body)
fmt.Println(string(body))
}require "net/http"
require "json"
uri = URI("https://api.apis.guru/v2/specs/googleapis.com/webrisk/v1/v1/hashes:search")
uri.query = URI.encode_www_form({
"alt" => "json",
"key" => "YOUR_API_KEY",
"fields" => "example",
"$.xgafv" => "1",
"callback" => "example",
"quotaUser" => "example",
"hashPrefix" => "example",
"uploadType" => "example",
"oauth_token" => "example",
"prettyPrint" => "true",
"threatTypes" => "example",
"access_token" => "example",
"upload_protocol" => "example"
})
http = Net::HTTP.new(uri.host, uri.port)
http.use_ssl = uri.scheme == "https"
req = Net::HTTP::Get.new(uri)
res = http.request(req)
puts JSON.parse(res.body)<?php
$url = "https://api.apis.guru/v2/specs/googleapis.com/webrisk/v1/v1/hashes:search?" . http_build_query([
"alt" => "json",
"key" => "YOUR_API_KEY",
"fields" => "example",
"$.xgafv" => "1",
"callback" => "example",
"quotaUser" => "example",
"hashPrefix" => "example",
"uploadType" => "example",
"oauth_token" => "example",
"prettyPrint" => "true",
"threatTypes" => "example",
"access_token" => "example",
"upload_protocol" => "example"
]);
$opts = ["http" => [
"method" => "GET",
]];
$ctx = stream_context_create($opts);
$res = file_get_contents($url, false, $ctx);
print_r(json_decode($res, true));Gets the most recent threat list diffs. These diffs should be applied to a local database of hashes to keep it up-to-date. If the local database is empty or excessively out-of-date, a complete snapshot of the database will be returned. This Method only updates a single ThreatList at a time. To updat
Hover any highlighted part to learn what it does
curl -X GET "https://api.apis.guru/v2/specs/googleapis.com/webrisk/v1/v1/threatLists:computeDiff?alt=json&key=YOUR_API_KEY&fields=example&$.xgafv=1&callback=example"aUser=example&threatType=THREAT_TYPE_UNSPECIFIED&uploadType=example&oauth_token=example&prettyPrint=true&access_token=example&versionToken=example&upload_protocol=example&constraints.maxDiffEntries=1&constraints.maxDatabaseEntries=1&constraints.supportedCompressions=example"
import requests
params = {
"alt": "json",
"key": "YOUR_API_KEY",
"fields": "example",
"$.xgafv": "1",
"callback": "example",
"quotaUser": "example",
"threatType": "THREAT_TYPE_UNSPECIFIED",
"uploadType": "example",
"oauth_token": "example",
"prettyPrint": "true",
"access_token": "example",
"versionToken": "example",
"upload_protocol": "example",
"constraints.maxDiffEntries": "1",
"constraints.maxDatabaseEntries": "1",
"constraints.supportedCompressions": "example"
}
response = requests.get(
"https://api.apis.guru/v2/specs/googleapis.com/webrisk/v1/v1/threatLists:computeDiff",
params=params,
)
print(response.json())const url = new URL('https://api.apis.guru/v2/specs/googleapis.com/webrisk/v1/v1/threatLists:computeDiff');
url.searchParams.set('alt', 'json');
url.searchParams.set('key', 'YOUR_API_KEY');
url.searchParams.set('fields', 'example');
url.searchParams.set('$.xgafv', '1');
url.searchParams.set('callback', 'example');
url.searchParams.set('quotaUser', 'example');
url.searchParams.set('threatType', 'THREAT_TYPE_UNSPECIFIED');
url.searchParams.set('uploadType', 'example');
url.searchParams.set('oauth_token', 'example');
url.searchParams.set('prettyPrint', 'true');
url.searchParams.set('access_token', 'example');
url.searchParams.set('versionToken', 'example');
url.searchParams.set('upload_protocol', 'example');
url.searchParams.set('constraints.maxDiffEntries', '1');
url.searchParams.set('constraints.maxDatabaseEntries', '1');
url.searchParams.set('constraints.supportedCompressions', 'example');
const response = await fetch(url);
const data = await response.json();
console.log(data);package main
import (
"fmt"
"io"
"net/http"
"net/url"
)
func main() {
baseURL, _ := url.Parse("https://api.apis.guru/v2/specs/googleapis.com/webrisk/v1/v1/threatLists:computeDiff")
q := baseURL.Query()
q.Set("alt", "json")
q.Set("key", "YOUR_API_KEY")
q.Set("fields", "example")
q.Set("$.xgafv", "1")
q.Set("callback", "example")
q.Set("quotaUser", "example")
q.Set("threatType", "THREAT_TYPE_UNSPECIFIED")
q.Set("uploadType", "example")
q.Set("oauth_token", "example")
q.Set("prettyPrint", "true")
q.Set("access_token", "example")
q.Set("versionToken", "example")
q.Set("upload_protocol", "example")
q.Set("constraints.maxDiffEntries", "1")
q.Set("constraints.maxDatabaseEntries", "1")
q.Set("constraints.supportedCompressions", "example")
baseURL.RawQuery = q.Encode()
targetURL := baseURL.String()
req, _ := http.NewRequest("GET", targetURL, nil)
client := &http.Client{}
resp, _ := client.Do(req)
defer resp.Body.Close()
body, _ := io.ReadAll(resp.Body)
fmt.Println(string(body))
}require "net/http"
require "json"
uri = URI("https://api.apis.guru/v2/specs/googleapis.com/webrisk/v1/v1/threatLists:computeDiff")
uri.query = URI.encode_www_form({
"alt" => "json",
"key" => "YOUR_API_KEY",
"fields" => "example",
"$.xgafv" => "1",
"callback" => "example",
"quotaUser" => "example",
"threatType" => "THREAT_TYPE_UNSPECIFIED",
"uploadType" => "example",
"oauth_token" => "example",
"prettyPrint" => "true",
"access_token" => "example",
"versionToken" => "example",
"upload_protocol" => "example",
"constraints.maxDiffEntries" => "1",
"constraints.maxDatabaseEntries" => "1",
"constraints.supportedCompressions" => "example"
})
http = Net::HTTP.new(uri.host, uri.port)
http.use_ssl = uri.scheme == "https"
req = Net::HTTP::Get.new(uri)
res = http.request(req)
puts JSON.parse(res.body)<?php
$url = "https://api.apis.guru/v2/specs/googleapis.com/webrisk/v1/v1/threatLists:computeDiff?" . http_build_query([
"alt" => "json",
"key" => "YOUR_API_KEY",
"fields" => "example",
"$.xgafv" => "1",
"callback" => "example",
"quotaUser" => "example",
"threatType" => "THREAT_TYPE_UNSPECIFIED",
"uploadType" => "example",
"oauth_token" => "example",
"prettyPrint" => "true",
"access_token" => "example",
"versionToken" => "example",
"upload_protocol" => "example",
"constraints.maxDiffEntries" => "1",
"constraints.maxDatabaseEntries" => "1",
"constraints.supportedCompressions" => "example"
]);
$opts = ["http" => [
"method" => "GET",
]];
$ctx = stream_context_create($opts);
$res = file_get_contents($url, false, $ctx);
print_r(json_decode($res, true));This method is used to check whether a URI is on a given threatList. Multiple threatLists may be searched in a single query. The response will list all requested threatLists the URI was found to match. If the URI is not found on any of the requested ThreatList an empty response will be returned.
Hover any highlighted part to learn what it does
curl -X GET "https://api.apis.guru/v2/specs/googleapis.com/webrisk/v1/v1/uris:search?alt=json&key=YOUR_API_KEY&uri=example&fields=example&$.xgafv=1&callback=example"aUser=example&uploadType=example&oauth_token=example&prettyPrint=true&threatTypes=example&access_token=example&upload_protocol=example"
import requests
params = {
"alt": "json",
"key": "YOUR_API_KEY",
"uri": "example",
"fields": "example",
"$.xgafv": "1",
"callback": "example",
"quotaUser": "example",
"uploadType": "example",
"oauth_token": "example",
"prettyPrint": "true",
"threatTypes": "example",
"access_token": "example",
"upload_protocol": "example"
}
response = requests.get(
"https://api.apis.guru/v2/specs/googleapis.com/webrisk/v1/v1/uris:search",
params=params,
)
print(response.json())const url = new URL('https://api.apis.guru/v2/specs/googleapis.com/webrisk/v1/v1/uris:search');
url.searchParams.set('alt', 'json');
url.searchParams.set('key', 'YOUR_API_KEY');
url.searchParams.set('uri', 'example');
url.searchParams.set('fields', 'example');
url.searchParams.set('$.xgafv', '1');
url.searchParams.set('callback', 'example');
url.searchParams.set('quotaUser', 'example');
url.searchParams.set('uploadType', 'example');
url.searchParams.set('oauth_token', 'example');
url.searchParams.set('prettyPrint', 'true');
url.searchParams.set('threatTypes', 'example');
url.searchParams.set('access_token', 'example');
url.searchParams.set('upload_protocol', 'example');
const response = await fetch(url);
const data = await response.json();
console.log(data);package main
import (
"fmt"
"io"
"net/http"
"net/url"
)
func main() {
baseURL, _ := url.Parse("https://api.apis.guru/v2/specs/googleapis.com/webrisk/v1/v1/uris:search")
q := baseURL.Query()
q.Set("alt", "json")
q.Set("key", "YOUR_API_KEY")
q.Set("uri", "example")
q.Set("fields", "example")
q.Set("$.xgafv", "1")
q.Set("callback", "example")
q.Set("quotaUser", "example")
q.Set("uploadType", "example")
q.Set("oauth_token", "example")
q.Set("prettyPrint", "true")
q.Set("threatTypes", "example")
q.Set("access_token", "example")
q.Set("upload_protocol", "example")
baseURL.RawQuery = q.Encode()
targetURL := baseURL.String()
req, _ := http.NewRequest("GET", targetURL, nil)
client := &http.Client{}
resp, _ := client.Do(req)
defer resp.Body.Close()
body, _ := io.ReadAll(resp.Body)
fmt.Println(string(body))
}require "net/http"
require "json"
uri = URI("https://api.apis.guru/v2/specs/googleapis.com/webrisk/v1/v1/uris:search")
uri.query = URI.encode_www_form({
"alt" => "json",
"key" => "YOUR_API_KEY",
"uri" => "example",
"fields" => "example",
"$.xgafv" => "1",
"callback" => "example",
"quotaUser" => "example",
"uploadType" => "example",
"oauth_token" => "example",
"prettyPrint" => "true",
"threatTypes" => "example",
"access_token" => "example",
"upload_protocol" => "example"
})
http = Net::HTTP.new(uri.host, uri.port)
http.use_ssl = uri.scheme == "https"
req = Net::HTTP::Get.new(uri)
res = http.request(req)
puts JSON.parse(res.body)<?php
$url = "https://api.apis.guru/v2/specs/googleapis.com/webrisk/v1/v1/uris:search?" . http_build_query([
"alt" => "json",
"key" => "YOUR_API_KEY",
"uri" => "example",
"fields" => "example",
"$.xgafv" => "1",
"callback" => "example",
"quotaUser" => "example",
"uploadType" => "example",
"oauth_token" => "example",
"prettyPrint" => "true",
"threatTypes" => "example",
"access_token" => "example",
"upload_protocol" => "example"
]);
$opts = ["http" => [
"method" => "GET",
]];
$ctx = stream_context_create($opts);
$res = file_get_contents($url, false, $ctx);
print_r(json_decode($res, true));Postman Setup Guide
- See official documentation for authentication and setup.
What can you build with Web Risk API?
Web Risk API is a Analytics API. Developers commonly use analytics APIs for:
- tracking product usage and user behaviour
- building custom reporting and BI dashboards
- measuring marketing and campaign performance
- running funnel, retention, and cohort analysis
- aggregating metrics from multiple data sources
No authentication required. This API is open — no signup or key needed. Ideal for quick prototypes and public-facing features. Web Risk API is free to use, making it a low-risk choice to experiment with.
New to APIs? Read our beginner's guide