Everything you need to integrate phishing detection into your own tools.
All endpoints are prefixed with:
https://api.steelgaze.app/api/v1Authorization header.Authorization: Bearer <YOUR_API_KEY>POST /predict expects text/plain containing the raw RFC-822 email (headers + body). JSON endpoints use application/json.
Request body (text/plain): raw email MIME.
{
"is_phishing": true,
"confidence": 0.97,
"explanations": {
"roberta": { "sentences": [...], "tokens": [...] },
"traditional": { "features": [...], "insights": [...] }
}
}POST /feedback
Content-Type: application/json
{
"prediction_id": "abc123",
"feedback": "This was actually safe."
}Content-Typecurl -X POST https://api.steelgaze.app/api/v1/predict -H "Authorization: Bearer $STEELGAZE_KEY" -H "Content-Type: text/plain" --data-binary @email.emlimport fs from 'fs/promises';
const email = await fs.readFile('email.eml', 'utf8');
const res = await fetch('https://api.steelgaze.app/api/v1/predict', {
method: 'POST',
headers: {
'Content-Type': 'text/plain',
Authorization: 'Bearer ' + process.env.STEELGAZE_KEY,
},
body: email,
});
console.log(await res.json());import requests, os, pathlib
email = pathlib.Path('email.eml').read_text()
resp = requests.post(
'https://api.steelgaze.app/api/v1/predict',
headers={
'Authorization': f'Bearer {os.environ["STEELGAZE_KEY"]}',
'Content-Type': 'text/plain',
},
data=email,
)
print(resp.json())429 by backing off until quota resets./predict, /feedback)