Full Report API

Every report type, as JSON in your own systems

The same reports as the search bar — websites, IP addresses, email addresses, phone numbers, IBANs, card BINs and crypto wallets — delivered as structured JSON for onboarding checks, review queues, case systems and automation.

This is separate from the lightweight Keyword Scan API, which only evaluates our risk keyword catalogue against page content and URLs.

How it works

  • 1. Send a POST with a JSON body to the endpoint for the report type.
  • 2. Every response has the same envelope: success, cached and the report itself.
  • 3. Read riskFactors for the signals that were found. Website and IP reports also carry a riskScore from LOW to CRITICAL.

Endpoints

ReportEndpointBody
WebsitePOST /api/analyze{"url":"https://example-shop.com"}
IP addressPOST /api/analyze-ip{"ip":"198.51.100.77"}
Email addressPOST /api/analyze-email{"email":"seller@example.com"}
Phone numberPOST /api/analyze-phone{"phone":"+447700900123"}

International format with the + prefix.

IBANPOST /api/analyze-iban{"iban":"NL91ABNA0417164300"}
Card BINPOST /api/analyze-card{"bin":"45717360"}

Send only the first 6–8 digits. Never send a full card number.

Crypto walletPOST /api/analyze-crypto{"address":"TExampLeWaLLetAddressDoNotUse12345"}

Bitcoin, Ethereum (plus BNB Chain, Base, Arbitrum, Optimism, Polygon, Avalanche) or Tron. Cached for 24 hours.

Completed reports are served from cache for up to 1 month (crypto wallets: 24 hours). Add "force": true to any body to run a fresh analysis, the same as "Refresh report" in the app.

curl -sS -X POST "https://osintintel.com/api/analyze-email" \
  -H "Content-Type: application/json" \
  -d '{"email":"seller@example.com"}'

Example responses

Abridged to the most useful fields, with dummy values. Live responses contain more fields (full WHOIS, DNS, SSL and page data for websites, for instance), and any field can be null when a source had no answer — build your integration to tolerate both.

Website/api/analyze›
{
  "success": true,
  "cached": false,
  "report": {
    "domain": "luxe-watches-outlet.com",
    "status": "COMPLETE",
    "domainAge": 11,
    "registrar": "NameCheap, Inc.",
    "hostingProvider": "Obscure Host LLC",
    "hostingCountry": "RU",
    "sslValid": true,
    "ecommercePlatform": "WooCommerce",
    "businessEmail": null,
    "trustpilotRating": 1.3,
    "flaggedKeywords": [
      { "keyword": "replica", "category": "Counterfeit & Replica" }
    ],
    "riskScore": "CRITICAL",
    "riskPoints": 155,
    "riskFactors": [
      { "factor": "Listed: Law enforcement fraud list", "points": 100 },
      { "factor": "Domain very new (11 days)", "points": 35 },
      { "factor": "Hosted in high-risk country", "points": 20 }
    ],
    "riskExplanation": "This domain is listed on a law enforcement database of known fraudulent businesses."
  }
}
IP address/api/analyze-ip›
{
  "success": true,
  "cached": false,
  "report": {
    "ip": "198.51.100.77",
    "status": "COMPLETE",
    "countryCode": "NL",
    "city": "Amsterdam",
    "isp": "Obscure Host LLC",
    "asn": "AS20473",
    "isProxy": true,
    "isHosting": true,
    "isVpnList": true,
    "openPorts": [22, 443, 3389],
    "vulns": ["CVE-2024-6387"],
    "riskScore": "HIGH",
    "riskPoints": 105,
    "riskFactors": [
      { "factor": "VPN / Anonymiser blocklist", "points": 50 },
      { "factor": "Known CVEs (1)", "points": 40 },
      { "factor": "High-risk open ports (RDP :3389)", "points": 15 }
    ]
  }
}
Email address/api/analyze-email›
{
  "success": true,
  "cached": false,
  "report": {
    "email": "seller8471@gmial.com",
    "status": "COMPLETE",
    "hasMxRecords": true,
    "mailProvider": null,
    "isDisposable": false,
    "isFreeProvider": false,
    "lookalikeOf": "gmail.com",
    "domainAge": 9,
    "breachCount": 0,
    "breaches": [],
    "gravatarFound": false,
    "riskFactors": [
      { "factor": "Lookalike of gmail.com", "points": 40 },
      { "factor": "Very new email domain (< 30 days)", "points": 25 }
    ]
  }
}
Phone number/api/analyze-phone›
{
  "success": true,
  "cached": false,
  "report": {
    "phone": "+447700900123",
    "status": "COMPLETE",
    "countryCode": "GB",
    "numberType": "VOIP",
    "isValid": true,
    "carrier": "Example Telecom",
    "internationalFormat": "+44 7700 900123",
    "riskFactors": [
      { "factor": "VoIP number", "points": 15 }
    ]
  }
}
IBAN/api/analyze-iban›
{
  "success": true,
  "cached": false,
  "report": {
    "iban": "NL91ABNA0417164300",
    "status": "COMPLETE",
    "isValid": true,
    "countryCode": "NL",
    "bankCode": "ABNA",
    "bankName": "ABN AMRO Bank",
    "bic": "ABNANL2A",
    "riskFactors": []
  }
}
Card BIN/api/analyze-card›
{
  "success": true,
  "cached": false,
  "report": {
    "bin": "45717360",
    "status": "COMPLETE",
    "schemeName": "Visa",
    "brand": "Visa Classic",
    "cardType": "debit",
    "prepaid": false,
    "countryCode": "DK",
    "bankName": "Jyske Bank A/S",
    "source": "binlist",
    "riskFactors": []
  }
}
Crypto wallet/api/analyze-crypto›
{
  "success": true,
  "cached": false,
  "report": {
    "address": "TExampLeWaLLetAddressDoNotUse12345",
    "chain": "TRON",
    "status": "COMPLETE",
    "checksumValid": true,
    "balance": 12.5,
    "tokenBalances": [{ "symbol": "USDT", "amount": 48210 }],
    "balanceUsd": 48214.3,
    "firstSeen": "2026-09-12T08:14:00.000Z",
    "lastSeen": "2026-09-21T19:02:00.000Z",
    "sanctioned": false,
    "otherChains": [],
    "riskFactors": [
      { "factor": "New wallet (< 30 days)", "points": 10 }
    ]
  }
}

Pricing

  • €0.08 per successful analysis when we run a fresh assessment—excluding VAT where it applies.
  • €0.035 per request when the response is served from cache (cached: true)—same report payload, no full re-run.

Volume and annual arrangements are available if you need predictable spend at scale.

Fair use and abuse rules apply, same as the web app. Need higher limits or a tailored rollout? Use the contact below—we'll align on scope and expectations before you commit.

Talk to ussales@osintintel.com