curl --request GET \
--url https://brew.new/api/v1/emails/audits/{auditId} \
--header 'Authorization: Bearer <token>'import requests
url = "https://brew.new/api/v1/emails/audits/{auditId}"
headers = {"Authorization": "Bearer <token>"}
response = requests.get(url, headers=headers)
print(response.text)const options = {method: 'GET', headers: {Authorization: 'Bearer <token>'}};
fetch('https://brew.new/api/v1/emails/audits/{auditId}', options)
.then(res => res.json())
.then(res => console.log(res))
.catch(err => console.error(err));<?php
$curl = curl_init();
curl_setopt_array($curl, [
CURLOPT_URL => "https://brew.new/api/v1/emails/audits/{auditId}",
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => "",
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 30,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => "GET",
CURLOPT_HTTPHEADER => [
"Authorization: Bearer <token>"
],
]);
$response = curl_exec($curl);
$err = curl_error($curl);
curl_close($curl);
if ($err) {
echo "cURL Error #:" . $err;
} else {
echo $response;
}package main
import (
"fmt"
"net/http"
"io"
)
func main() {
url := "https://brew.new/api/v1/emails/audits/{auditId}"
req, _ := http.NewRequest("GET", url, nil)
req.Header.Add("Authorization", "Bearer <token>")
res, _ := http.DefaultClient.Do(req)
defer res.Body.Close()
body, _ := io.ReadAll(res.Body)
fmt.Println(string(body))
}HttpResponse<String> response = Unirest.get("https://brew.new/api/v1/emails/audits/{auditId}")
.header("Authorization", "Bearer <token>")
.asString();require 'uri'
require 'net/http'
url = URI("https://brew.new/api/v1/emails/audits/{auditId}")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Get.new(url)
request["Authorization"] = 'Bearer <token>'
response = http.request(request)
puts response.read_body{
"schemaVersion": 1,
"rulesetVersion": "<string>",
"auditId": "3c90c3cc-0d44-4b50-8888-8dd25736052a",
"contentHash": "<string>",
"auditedAt": "2023-11-07T05:31:56Z",
"expiresAt": "2023-11-07T05:31:56Z",
"policy": {
"purpose": "marketing",
"source": "provided",
"unsubscribe": "required"
},
"summary": {
"blockers": 1,
"errors": 1,
"warnings": 1,
"info": 1,
"total": 1
},
"checks": [
{
"id": "<string>",
"status": "passed",
"durationMs": 1,
"findingCount": 0
}
],
"metrics": {
"htmlBytes": 1,
"linkCount": 1,
"imageCount": 1,
"gifCount": 1,
"loadedSize": {
"status": "exact",
"htmlBytes": 1,
"remoteAssetBytes": 1,
"totalBytes": 1,
"assetCount": 1
}
},
"findings": [
{
"id": "<string>",
"ruleId": "<string>",
"category": "compliance",
"severity": "blocker",
"impact": "block",
"message": "<string>",
"remediation": "<string>",
"sources": [
"<string>"
],
"target": {
"kind": "email"
},
"occurrenceCount": 123,
"standards": [
{
"id": "<string>",
"url": "<string>"
}
]
}
],
"totalFindings": 1,
"findingsTruncated": true,
"completion": {
"status": "complete",
"readiness": "ready",
"score": 50
},
"pagination": {
"cursor": "<string>",
"hasMore": true,
"returned": 123,
"storedFindings": 123
}
}Read a saved email audit
Returns a bounded page of the normalized audit findings, including finding IDs, rule IDs, targets, remediation, and the audited content hash. Reading pages is free and never reruns the audit. Continue using pagination.cursor. Reports are retained for seven days; the report’s expiresAt is the separate audit-attestation expiry. Completion and coverage fields identify incomplete analysis or representative-only findings.
curl --request GET \
--url https://brew.new/api/v1/emails/audits/{auditId} \
--header 'Authorization: Bearer <token>'import requests
url = "https://brew.new/api/v1/emails/audits/{auditId}"
headers = {"Authorization": "Bearer <token>"}
response = requests.get(url, headers=headers)
print(response.text)const options = {method: 'GET', headers: {Authorization: 'Bearer <token>'}};
fetch('https://brew.new/api/v1/emails/audits/{auditId}', options)
.then(res => res.json())
.then(res => console.log(res))
.catch(err => console.error(err));<?php
$curl = curl_init();
curl_setopt_array($curl, [
CURLOPT_URL => "https://brew.new/api/v1/emails/audits/{auditId}",
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => "",
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 30,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => "GET",
CURLOPT_HTTPHEADER => [
"Authorization: Bearer <token>"
],
]);
$response = curl_exec($curl);
$err = curl_error($curl);
curl_close($curl);
if ($err) {
echo "cURL Error #:" . $err;
} else {
echo $response;
}package main
import (
"fmt"
"net/http"
"io"
)
func main() {
url := "https://brew.new/api/v1/emails/audits/{auditId}"
req, _ := http.NewRequest("GET", url, nil)
req.Header.Add("Authorization", "Bearer <token>")
res, _ := http.DefaultClient.Do(req)
defer res.Body.Close()
body, _ := io.ReadAll(res.Body)
fmt.Println(string(body))
}HttpResponse<String> response = Unirest.get("https://brew.new/api/v1/emails/audits/{auditId}")
.header("Authorization", "Bearer <token>")
.asString();require 'uri'
require 'net/http'
url = URI("https://brew.new/api/v1/emails/audits/{auditId}")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Get.new(url)
request["Authorization"] = 'Bearer <token>'
response = http.request(request)
puts response.read_body{
"schemaVersion": 1,
"rulesetVersion": "<string>",
"auditId": "3c90c3cc-0d44-4b50-8888-8dd25736052a",
"contentHash": "<string>",
"auditedAt": "2023-11-07T05:31:56Z",
"expiresAt": "2023-11-07T05:31:56Z",
"policy": {
"purpose": "marketing",
"source": "provided",
"unsubscribe": "required"
},
"summary": {
"blockers": 1,
"errors": 1,
"warnings": 1,
"info": 1,
"total": 1
},
"checks": [
{
"id": "<string>",
"status": "passed",
"durationMs": 1,
"findingCount": 0
}
],
"metrics": {
"htmlBytes": 1,
"linkCount": 1,
"imageCount": 1,
"gifCount": 1,
"loadedSize": {
"status": "exact",
"htmlBytes": 1,
"remoteAssetBytes": 1,
"totalBytes": 1,
"assetCount": 1
}
},
"findings": [
{
"id": "<string>",
"ruleId": "<string>",
"category": "compliance",
"severity": "blocker",
"impact": "block",
"message": "<string>",
"remediation": "<string>",
"sources": [
"<string>"
],
"target": {
"kind": "email"
},
"occurrenceCount": 123,
"standards": [
{
"id": "<string>",
"url": "<string>"
}
]
}
],
"totalFindings": 1,
"findingsTruncated": true,
"completion": {
"status": "complete",
"readiness": "ready",
"score": 50
},
"pagination": {
"cursor": "<string>",
"hasMore": true,
"returned": 123,
"storedFindings": 123
}
}Authorizations
Send your Brew API key as Authorization: Bearer brew_xxx.
Headers
The brand this request acts on. REQUIRED for organization-scoped credentials (otherwise 400 BRAND_ID_REQUIRED — there is no default brand); list ids with GET /v1/brands. Brand-scoped credentials may omit it, and sending a different brand returns 403 BRAND_SCOPE_MISMATCH. A brand outside your organization returns 404 BRAND_NOT_FOUND.
1 - 64Path Parameters
Query Parameters
100Page size (1-100). Defaults to 100.
1 <= x <= 10050
Response
One page of saved findings.
1 1 - 100^sha256:[0-9a-f]{64}$Show child attributes
Show child attributes
Show child attributes
Show child attributes
32- Option 1
- Option 2
- Option 3
- Option 4
Show child attributes
Show child attributes
Show child attributes
Show child attributes
100Show child attributes
Show child attributes
x >= 0- Option 1
- Option 2
Show child attributes
Show child attributes
Show child attributes
Show child attributes
Was this page helpful?