Developer
Phrenex API
Integrate social engineering analysis into your tools, SOAR platforms, and security workflows.
Get API Access
API keys are included with all subscription plans. Subscribe to get your key and start integrating.
Base URL
https://se-decoder-api.joshua-j-taylor.workers.devAuthentication
Include your API key as a Bearer token in the Authorization header:
Authorization: Bearer sed_your_api_key_hereUnauthenticated requests from the web tool are limited to 3/day per IP. Authenticated requests get tier-based limits.
POST /api/analyze
Analyze a suspicious message for social engineering tactics.
Request Body
{
"message": "string (max 10,000 chars)",
"messageType": "auto | email | sms | voice_transcript | chat_message | social_media | website_copy"
}Examples
curl
curl -X POST https://se-decoder-api.joshua-j-taylor.workers.dev/api/analyze \
-H "Content-Type: application/json" \
-H "Authorization: Bearer sed_your_api_key_here" \
-d '{
"message": "Your account has been suspended. Click here to verify: https://example.com/verify",
"messageType": "email"
}'Python
import requests
response = requests.post(
"https://se-decoder-api.joshua-j-taylor.workers.dev/api/analyze",
headers={
"Content-Type": "application/json",
"Authorization": "Bearer sed_your_api_key_here"
},
json={
"message": "Your account has been suspended. Click here to verify.",
"messageType": "email"
}
)
result = response.json()
print(f"Risk: {result['verdict']['risk_level']}")
print(f"Summary: {result['verdict']['summary']}")JavaScript
const response = await fetch(
"https://se-decoder-api.joshua-j-taylor.workers.dev/api/analyze",
{
method: "POST",
headers: {
"Content-Type": "application/json",
"Authorization": "Bearer sed_your_api_key_here"
},
body: JSON.stringify({
message: "Your account has been suspended. Click here to verify.",
messageType: "email"
})
}
);
const result = await response.json();
console.log(`Risk: ${result.verdict.risk_level}`);
console.log(`Summary: ${result.verdict.summary}`);Response (200)
{
"meta": {
"input_type": "email",
"language": "en",
"word_count": 142
},
"verdict": {
"risk_level": "critical | high | medium | low | benign",
"summary": "One-sentence plain language summary (max 280 chars)",
"rationale": "Why this risk level was assigned"
},
"cialdini": [
{
"principle": "authority",
"present": true,
"evidence": "Claims to be from account security team",
"strength": "strong | moderate | weak"
}
],
"cognitive_biases": [
{
"bias": "loss aversion",
"explanation": "Threatens account suspension to motivate action"
}
],
"mitre_attack": [
{
"technique_id": "T1566.002",
"technique_name": "Spearphishing Link",
"tactic": "Initial Access",
"relevance": "Contains a deceptive URL"
}
],
"attacker_goal": {
"primary_goal": "credential_harvest",
"target_asset": "Account credentials",
"kill_chain_phase": "delivery"
},
"action_plan": {
"do_now": ["Do not click any links in this message"],
"do_not": ["Do not enter credentials on any linked page"],
"report_to": "Forward to your IT security team",
"verification_steps": ["Log in directly at the official website"]
},
"indicators": {
"urls": ["https://example.com/verify"],
"domains": ["example.com"],
"sender_info": "[email protected]",
"mentioned_orgs": ["Example Corp"],
"lure_type": "account_verification"
},
"confidence": {
"score": 0.92,
"caveats": []
},
"_submission_id": 42
}Error Responses
400 Invalid input (empty message, bad JSON)402 Credits exhausted (paid tier)429 Rate limit exceeded (includes daily_limit and daily_used)502 Model returned invalid output after retryPOST /api/feedback
Submit quality feedback on an analysis.
{
"submission_id": 42,
"rating": 1,
"text": "Optional correction or comment"
}rating: 1 (thumbs up) or -1 (thumbs down). Returns {"ok": true}.
GET /api/credits
Check remaining credits for an API key.
GET /api/credits?key=sed_your_api_key_hereReturns:
{ "tier": "paid", "credits_remaining": 47 }Rate Limits
TierDaily LimitBurst Limit
Web tool (no key)3/day5/min
Individual ($19.99/mo)50/day5/min
Team ($49.99/mo)200/day5/min
Business ($199.99/mo)1,000/day5/min
Credit packsUntil credits exhausted5/min
Rate limit responses (429) include daily_limit and daily_used fields.
Security