API Reference

The IsThisAScam API.

Integrate scam detection into your applications. Analyze emails, URLs, text messages, and screenshots with our six-layer detection engine.

Base URLhttps://isthisascam.to/api/v1
FormatJSON request and response bodies
AuthBearer token on every request

Authentication

All API requests require a Bearer token in the Authorization header. Get your API key from your dashboard.

Authorization header
Authorization: Bearer itas_your_api_key_here

Your API key starts with itas_ and is 36 characters long. Keep it secret — never expose it in client-side code or public repositories.

Quick start

Get up and running in three steps.

01

Get your API key

Subscribe to an API plan at pricing and copy your key from the dashboard.

02

Make a request

cURL
curl -X POST https://isthisascam.to/api/v1/check \
  -H "Authorization: Bearer itas_your_api_key_here" \
  -H "Content-Type: application/json" \
  -d '{
    "content": "Urgent: Your PayPal account has been limited. Verify now: http://paypa1-secure.xyz/verify",
    "input_type": "text"
  }'
03

Parse the response

200 OK
{
  "json-key">"id": "sR4kX9pLm2wN",
  "json-key">"verdict": "confirmed_scam",
  "json-key">"composite_score": 87,
  "json-key">"confidence": 94,
  "json-key">"scam_type": "phishing",
  "json-key">"explanation": "This message exhibits strong phishing indicators including credential harvesting links, urgency pressure, and sender domain spoofing."
}

Use verdict and composite_score to decide how to handle the content in your application.

POST

/v1/check

Analyze a single piece of content for scam indicators. Supports text, URLs, and email content.

Parameters

FieldTypeDescription
contentstringrequiredThe text, URL, or email to analyze. Max 100,000 characters.
input_typestringOne of "text", "url", or "email". Auto-detected if omitted.
localestringLanguage code for the explanation (e.g. "en", "es"). Defaults to "en".

Example request

cURL
curl -X POST https://isthisascam.to/api/v1/check \
  -H "Authorization: Bearer itas_your_api_key_here" \
  -H "Content-Type: application/json" \
  -d '{
    "content": "Urgent: Your PayPal account has been limited. Verify now: http://paypa1-secure.xyz/verify",
    "input_type": "text",
    "locale": "en"
  }'

Example response

200 OK
{
  "json-key">"id": "sR4kX9pLm2wN",
  "json-key">"input_type": "email",
  "json-key">"composite_score": 87,
  "json-key">"verdict": "confirmed_scam",
  "json-key">"scam_type": "phishing",
  "json-key">"confidence": 94,
  "json-key">"explanation": "This message exhibits strong phishing indicators including credential harvesting links, urgency pressure, and sender domain spoofing.",
  "json-key">"red_flags": [
    {
      "json-key">"id": "rf_1",
      "json-key">"title": "Suspicious sender domain",
      "json-key">"description": "Domain registered 2 days ago",
      "json-key">"severity": "critical",
      "json-key">"layer": 2,
      "json-key">"evidence": "paypa1-secure.xyz registered 2024-04-13"
    },
    {
      "json-key">"id": "rf_2",
      "json-key">"title": "Urgency pressure",
      "json-key">"description": "Threatens account suspension within 24 hours",
      "json-key">"severity": "high",
      "json-key">"layer": 4
    },
    {
      "json-key">"id": "rf_3",
      "json-key">"title": "Credential harvesting",
      "json-key">"description": "Links to fake login page",
      "json-key">"severity": "critical",
      "json-key">"layer": 4,
      "json-key">"evidence": "http://paypa1-secure.xyz/verify"
    }
  ],
  "json-key">"layers": [
    {
      "json-key">"layer": 1,
      "json-key">"name": "URL Reputation",
      "json-key">"score": 85,
      "json-key">"status": "danger",
      "json-key">"flags": [],
      "json-key">"latency_ms": 320
    },
    {
      "json-key">"layer": 2,
      "json-key">"name": "Domain Intelligence",
      "json-key">"score": 92,
      "json-key">"status": "danger",
      "json-key">"flags": [],
      "json-key">"latency_ms": 450
    },
    {
      "json-key">"layer": 3,
      "json-key">"name": "Email Authentication",
      "json-key">"score": 70,
      "json-key">"status": "warning",
      "json-key">"flags": [],
      "json-key">"latency_ms": 180
    },
    {
      "json-key">"layer": 4,
      "json-key">"name": "AI Text Analysis",
      "json-key">"score": 88,
      "json-key">"status": "danger",
      "json-key">"flags": [],
      "json-key">"latency_ms": 2100
    },
    {
      "json-key">"layer": 5,
      "json-key">"name": "Visual Analysis",
      "json-key">"score": 0,
      "json-key">"status": "skipped",
      "json-key">"flags": [],
      "json-key">"latency_ms": 0
    },
    {
      "json-key">"layer": 6,
      "json-key">"name": "Community Database",
      "json-key">"score": 45,
      "json-key">"status": "warning",
      "json-key">"flags": [],
      "json-key">"latency_ms": 120
    }
  ],
  "json-key">"processing_time_ms": 3170,
  "json-key">"analyzed_at": "2026-04-15T12:00:00Z"
}
POST

/v1/bulk

Analyze up to ten items in a single request. Each item counts as one API call towards your rate limit.

Parameters

FieldTypeDescription
itemsarrayrequiredArray of objects with content (string, required) and optional input_type. Max 10 items.

Example request

cURL
curl -X POST https://isthisascam.to/api/v1/bulk \
  -H "Authorization: Bearer itas_your_api_key_here" \
  -H "Content-Type: application/json" \
  -d '{
    "items": [
      { "content": "https://suspicious-url.com" },
      { "content": "You won a free iPhone! Claim here...", "input_type": "text" },
      { "content": "From: [email protected]\nSubject: Account locked" }
    ]
  }'

Example response

200 OK
{
  "json-key">"results": [
    {
      "json-key">"id": "a1b2c3",
      "json-key">"verdict": "likely_scam",
      "json-key">"composite_score": 72,
      "json-key">"scam_type": "phishing"
    },
    {
      "json-key">"id": "d4e5f6",
      "json-key">"verdict": "confirmed_scam",
      "json-key">"composite_score": 91,
      "json-key">"scam_type": "lottery"
    },
    {
      "json-key">"id": "g7h8i9",
      "json-key">"verdict": "confirmed_scam",
      "json-key">"composite_score": 88,
      "json-key">"scam_type": "phishing"
    }
  ],
  "json-key">"total": 3,
  "json-key">"processing_time_ms": 8420
}

Response format

Every successful scan returns a ScanResult object with the following fields.

ScanResult

FieldTypeDescription
idstringUnique scan identifier
input_typestringDetected or specified input type: text, url, or email
composite_scorenumberOverall risk score from 0 (safe) to 100 (confirmed scam)
verdictstringOne of safe, suspicious, likely_scam, or confirmed_scam
scam_typestringDetected category (e.g. phishing, romance, tech_support) or none
confidencenumberAnalysis confidence from 0 to 100
explanationstringHuman-readable explanation of the verdict
red_flagsRedFlag[]Array of detected red flags (see below)
layersLayer[]Per-layer detection results (see below)
processing_time_msnumberTotal server-side processing time in milliseconds
analyzed_atstringISO 8601 timestamp of when the analysis completed

RedFlag

FieldTypeDescription
idstringUnique flag identifier
titlestringShort title of the red flag
descriptionstringDetailed explanation
severitystringlow, medium, high, or critical
layernumberWhich detection layer produced this flag (1-6)
evidencestring?Optional supporting evidence

Layer

FieldTypeDescription
layernumberLayer number (1-6)
namestringHuman-readable layer name
scorenumberLayer-specific risk score (0-100)
statusstringclean, warning, danger, or skipped
flagsstring[]Flag IDs produced by this layer
latency_msnumberProcessing time for this layer in milliseconds

Error codes

All errors return a JSON body with error and message fields.

CodeMeaningDescription
400Bad RequestMissing or invalid parameters (e.g. empty content, exceeds max length)
401UnauthorizedMissing or invalid API key
403ForbiddenAPI key does not have permission for this endpoint or plan
429Rate LimitedRate limit exceeded. Check X-RateLimit-Reset header for reset time.
500Server ErrorUnexpected error. Retry with exponential backoff.
Example error response
{
  "json-key">"error": "rate_limit_exceeded",
  "json-key">"message": "Daily limit reached. Resets at 2026-04-16T00:00:00Z."
}

Rate limits

Rate limits are applied per API key on a daily (24-hour rolling window) basis.

PlanDaily limitNotes
Free5 / dayWeb scans only, no API access
API1,500 / monthFull API access, credit packs available for overages
EnterpriseUnlimitedCustom limits, dedicated support. Contact us

Rate limit headers

Every response includes these headers so you can track your usage.

HeaderDescription
X-RateLimit-RemainingNumber of requests remaining in the current window
X-RateLimit-ResetISO 8601 timestamp when the rate limit resets

SDK examples

Use any HTTP client to call the API. Here are examples in popular languages.

Note

Native SDKs are coming. We're building official packages for JavaScript, Python, and Go. For now, use raw HTTP requests as shown below.

JavaScript
const response = await fetch("https://isthisascam.to/api/v1/check", {
  method: "POST",
  headers: {
    "Authorization": "Bearer itas_your_api_key_here",
    "Content-Type": "application/json",
  },
  body: JSON.stringify({
    content: "Urgent: Verify your account at http://paypa1-secure.xyz",
    input_type: "text",
  }),
});

const data = await response.json();
console.log(data.verdict, data.composite_score);

Changelog

v1.0
April 2026

Initial API release. Includes /v1/check and /v1/bulk endpoints with six-layer scam detection.

Ready

Get an API key.

Start API · $19.99/mo →