Analyze up to 50 emails
curl --request POST \
--url https://api.signuprisk.com/v1/analyze-email/batch \
--header 'Authorization: Bearer <token>' \
--header 'Content-Type: application/json' \
--data '
{
"emails": [
"person@example.com",
"abuse@example.org"
]
}
'const options = {
method: 'POST',
headers: {Authorization: 'Bearer <token>', 'Content-Type': 'application/json'},
body: JSON.stringify({emails: ['person@example.com', 'abuse@example.org']})
};
fetch('https://api.signuprisk.com/v1/analyze-email/batch', options)
.then(res => res.json())
.then(res => console.log(res))
.catch(err => console.error(err));import requests
url = "https://api.signuprisk.com/v1/analyze-email/batch"
payload = { "emails": ["person@example.com", "abuse@example.org"] }
headers = {
"Authorization": "Bearer <token>",
"Content-Type": "application/json"
}
response = requests.post(url, json=payload, headers=headers)
print(response.text)package main
import (
"fmt"
"strings"
"net/http"
"io"
)
func main() {
url := "https://api.signuprisk.com/v1/analyze-email/batch"
payload := strings.NewReader("{\n \"emails\": [\n \"person@example.com\",\n \"abuse@example.org\"\n ]\n}")
req, _ := http.NewRequest("POST", url, payload)
req.Header.Add("Authorization", "Bearer <token>")
req.Header.Add("Content-Type", "application/json")
res, _ := http.DefaultClient.Do(req)
defer res.Body.Close()
body, _ := io.ReadAll(res.Body)
fmt.Println(string(body))
}{
"count": 2,
"success_count": 2,
"failure_count": 0,
"results": [
{
"index": 0,
"success": true,
"email": {
"input": "person@example.com",
"normalized": "person@example.com",
"normalized_preserving_case": "person@example.com",
"canonical": "person@example.com",
"is_well_formed": true,
"format_issues": [],
"format_explanation": "The email address is structurally well formed. This does not mean it is safe, trusted, deliverable, or non-disposable.",
"is_internationalized": false
},
"decision": {
"action": "block",
"risk_score": 100,
"risk_band": "very_high",
"summary": "Very high-risk signup. Primary concern: IANA-reserved special-use domain that can never receive email.",
"assessment": {
"confidence": "medium",
"evidence_strength": "strong",
"evidence_coverage": "broad",
"uncertainty": "low",
"limitations": []
}
},
"checks": null,
"explanation": null,
"error": null
},
{
"index": 1,
"success": true,
"email": {
"input": "abuse@example.org",
"normalized": "abuse@example.org",
"normalized_preserving_case": "abuse@example.org",
"canonical": "abuse@example.org",
"is_well_formed": true,
"format_issues": [],
"format_explanation": "The email address is structurally well formed. This does not mean it is safe, trusted, deliverable, or non-disposable.",
"is_internationalized": false
},
"decision": {
"action": "block",
"risk_score": 100,
"risk_band": "very_high",
"summary": "Very high-risk signup. Primary concern: IANA-reserved special-use domain that can never receive email.",
"assessment": {
"confidence": "high",
"evidence_strength": "strong",
"evidence_coverage": "broad",
"uncertainty": "low",
"limitations": []
}
},
"checks": null,
"explanation": null,
"error": null
}
],
"metadata": {
"warnings": [],
"usage": {
"requests": {
"used": 2,
"limit": 10000,
"unlimited": false,
"remaining": 9998
},
"explanations": {
"used": 0,
"limit": 500,
"unlimited": false,
"remaining": 500
}
},
"plan": {
"current_plan": "Developer",
"billing_period": {
"starts": "2026-09-16T00:00:00Z",
"ends": "2026-10-16T00:00:00Z"
},
"reset_at": "2026-10-16T00:00:00Z"
},
"assessment_version": "2026.08.28"
}
}API Reference
Analyze up to 50 emails
Synchronously score 1–50 emails. Each item consumes one request-unit.
Maximum 50 items per request (LIMIT_EXCEEDED if exceeded). Partial
failure is per-item via results[].error. Required scope: analyze.
POST
/
v1
/
analyze-email
/
batch
Analyze up to 50 emails
curl --request POST \
--url https://api.signuprisk.com/v1/analyze-email/batch \
--header 'Authorization: Bearer <token>' \
--header 'Content-Type: application/json' \
--data '
{
"emails": [
"person@example.com",
"abuse@example.org"
]
}
'const options = {
method: 'POST',
headers: {Authorization: 'Bearer <token>', 'Content-Type': 'application/json'},
body: JSON.stringify({emails: ['person@example.com', 'abuse@example.org']})
};
fetch('https://api.signuprisk.com/v1/analyze-email/batch', options)
.then(res => res.json())
.then(res => console.log(res))
.catch(err => console.error(err));import requests
url = "https://api.signuprisk.com/v1/analyze-email/batch"
payload = { "emails": ["person@example.com", "abuse@example.org"] }
headers = {
"Authorization": "Bearer <token>",
"Content-Type": "application/json"
}
response = requests.post(url, json=payload, headers=headers)
print(response.text)package main
import (
"fmt"
"strings"
"net/http"
"io"
)
func main() {
url := "https://api.signuprisk.com/v1/analyze-email/batch"
payload := strings.NewReader("{\n \"emails\": [\n \"person@example.com\",\n \"abuse@example.org\"\n ]\n}")
req, _ := http.NewRequest("POST", url, payload)
req.Header.Add("Authorization", "Bearer <token>")
req.Header.Add("Content-Type", "application/json")
res, _ := http.DefaultClient.Do(req)
defer res.Body.Close()
body, _ := io.ReadAll(res.Body)
fmt.Println(string(body))
}{
"count": 2,
"success_count": 2,
"failure_count": 0,
"results": [
{
"index": 0,
"success": true,
"email": {
"input": "person@example.com",
"normalized": "person@example.com",
"normalized_preserving_case": "person@example.com",
"canonical": "person@example.com",
"is_well_formed": true,
"format_issues": [],
"format_explanation": "The email address is structurally well formed. This does not mean it is safe, trusted, deliverable, or non-disposable.",
"is_internationalized": false
},
"decision": {
"action": "block",
"risk_score": 100,
"risk_band": "very_high",
"summary": "Very high-risk signup. Primary concern: IANA-reserved special-use domain that can never receive email.",
"assessment": {
"confidence": "medium",
"evidence_strength": "strong",
"evidence_coverage": "broad",
"uncertainty": "low",
"limitations": []
}
},
"checks": null,
"explanation": null,
"error": null
},
{
"index": 1,
"success": true,
"email": {
"input": "abuse@example.org",
"normalized": "abuse@example.org",
"normalized_preserving_case": "abuse@example.org",
"canonical": "abuse@example.org",
"is_well_formed": true,
"format_issues": [],
"format_explanation": "The email address is structurally well formed. This does not mean it is safe, trusted, deliverable, or non-disposable.",
"is_internationalized": false
},
"decision": {
"action": "block",
"risk_score": 100,
"risk_band": "very_high",
"summary": "Very high-risk signup. Primary concern: IANA-reserved special-use domain that can never receive email.",
"assessment": {
"confidence": "high",
"evidence_strength": "strong",
"evidence_coverage": "broad",
"uncertainty": "low",
"limitations": []
}
},
"checks": null,
"explanation": null,
"error": null
}
],
"metadata": {
"warnings": [],
"usage": {
"requests": {
"used": 2,
"limit": 10000,
"unlimited": false,
"remaining": 9998
},
"explanations": {
"used": 0,
"limit": 500,
"unlimited": false,
"remaining": 500
}
},
"plan": {
"current_plan": "Developer",
"billing_period": {
"starts": "2026-09-16T00:00:00Z",
"ends": "2026-10-16T00:00:00Z"
},
"reset_at": "2026-10-16T00:00:00Z"
},
"assessment_version": "2026.08.28"
}
}Authorizations
First-party API key. Send the canonical key as a Bearer token:
Authorization: Bearer eisk_live_eik_<24hex>_<64hex>
Used on all API-client routes (/v1/analyze-email, batch, bulk,
customer webhooks). Scopes (analyze, bulk, webhooks) authorize a
route; the account plan authorizes premium functionality.
Headers
Body
application/json