Spam Reporting API – Report Phone Number Spam

Report spam, robocalls, and scam phone numbers to help protect the community

Community-Driven Spam Protection

The Spam Reporting API allows you to report spam, robocalls, and scam phone numbers to our master spam database. Your reports help protect the entire community by building a comprehensive database of malicious phone numbers.

Rate Limits: 50 reports per hour, 5 reports per minute per API key to prevent abuse.

Authentication

All authenticated endpoints require your API key in the request headers:

Authorization: Bearer YOUR_API_KEY

Don't have an API key? Get your API key here.

Spam Lookup

Check if phone numbers are reported as spam, robocalls, or scams using our multi-source spam detection.

Basic Spam Lookup

Quick spam check for a single phone number. Available via GET or POST.

GET https://api-service.verirouteintel.io/api/v1/spam?phone_number=15555550123
POST https://api-service.verirouteintel.io/api/v1/spam

Request Parameters

ParameterTypeRequiredDescription
phone_number string Yes Phone number in E.164 or national format
check_spam boolean No Whether to query external spam provider (default: true)

POST Request Body

{
  "phone_number": "15555550123",
  "check_spam": true
}

Response

{
  "phone_number": "15555550123",
  "is_spam": true,
  "is_robocall": false,
  "is_scam": false,
  "spam_type": "SPAM",
  "cached": false,
  "source": "enhanced"
}

Response Fields

FieldTypeDescription
is_spambooleanWhether the number is reported as spam
is_robocallbooleanWhether the number is associated with robocalls
is_scambooleanWhether the number is associated with scams
spam_typestringClassification: "NONE", "SPAM", "ROBOCALL", or "SCAM"
cachedbooleanWhether result was served from cache
sourcestringData source identifier
Rate Limit: 200 requests per hour, 20 per minute per API key.

Enhanced Multi-Source Spam Lookup

Advanced spam detection that aggregates data from multiple sources for comprehensive spam intelligence with confidence scores.

POST https://api-service.verirouteintel.io/api/v1/spam/lookup/enhanced

Request Body

{
  "phone_number": "15555550123",
  "include_web_sources": true,
  "include_provider": true
}

Parameters

ParameterTypeRequiredDescription
phone_number string Yes Phone number to check
include_web_sources boolean No Include web-scraped data (default: true)
include_provider boolean No Include external provider data (default: true)

Response

{
  "phone_number": "15555550123",
  "is_spam": true,
  "is_robocall": true,
  "is_scam": false,
  "spam_type": "ROBOCALL",
  "confidence": 0.92,
  "total_complaints": 15,
  "sources": ["database", "provider", "web"],
  "categories": ["Warranties", "Auto"]
}

Enhanced Response Fields

FieldTypeDescription
confidencenumberConfidence score from 0.0 to 1.0
total_complaintsintegerTotal number of complaints across all sources
sourcesarrayList of data sources that contributed to the result
categoriesarraySpam categories identified (e.g., "Warranties", "Political")

Batch Spam Lookup

Look up spam reputation for up to 100 phone numbers in a single request with automatic deduplication and two-phase billing.

POST https://api-service.verirouteintel.io/api/v1/spam/batch

Request Body

{
  "phone_numbers": ["15555550123", "19494600638", "15555550123"],
  "check_spam": true
}

Response

{
  "job_id": "a1b2c3d4-e5f6-7890-abcd-ef1234567890",
  "results": [
    {
      "phone_number": "15555550123",
      "is_spam": true,
      "is_robocall": false,
      "is_scam": false,
      "spam_type": "SPAM",
      "source": "MCL_PROVIDER",
      "cached": false,
      "input_indices": [0, 2],
      "status": "success"
    },
    {
      "phone_number": "19494600638",
      "is_spam": false,
      "is_robocall": false,
      "is_scam": false,
      "source": "MCL_PROVIDER",
      "cached": false,
      "input_indices": [1],
      "status": "success"
    }
  ],
  "summary": {
    "submitted": 3,
    "unique": 2,
    "duplicates_removed": 1,
    "succeeded": 2,
    "failed": 0,
    "from_cache": 0
  },
  "billing": {
    "estimated_cost": 0.02,
    "actual_cost": 0.02,
    "savings_from_deduplication": 0.01
  },
  "timing": {
    "submitted_at": "2026-01-18T10:30:00Z",
    "completed_at": "2026-01-18T10:30:01Z",
    "duration_ms": 1234
  }
}

Key Features

  • Automatic Deduplication: Duplicate phone numbers are detected and only charged once. The input_indices field shows which positions in your input array map to each result.
  • Two-Phase Billing: Balance is reserved before processing and settled after completion. Failed lookups are not charged.
  • Full Transparency: Response includes detailed summary, billing breakdown, and timing information.
  • Job Tracking: Each batch request gets a unique job_id for audit and support purposes.
Rate Limit: 50 batch requests per hour, 5 per minute per API key. Maximum 100 numbers per batch.

Spam Reporting

Report spam, robocalls, and scam phone numbers to our master spam database. Your reports help protect the entire community.

Report Spam Number (Authenticated)

POST https://api-service.verirouteintel.io/api/v1/spam/report

Request Body

{
  "phone_number": "15555550123",
  "report_type": "spam",
  "details": "Automated call about car warranty"
}

Successful Response

{
  "success": true,
  "message": "Spam report submitted successfully",
  "data": {
    "phone_number": "+15555550123",
    "report_type": "spam",
    "reported_at": "2025-12-04T15:30:00.000000+00:00",
    "complaint_count": 1
  }
}

Public Spam Reporting (No API Key Required)

This endpoint allows anyone to contribute to our community spam database without requiring an API key. Perfect for landing pages, public forms, and mobile apps where exposing API keys is not desirable.

POST https://api-service.verirouteintel.io/api/v1/spam/report/public
No Authentication Required: This endpoint is rate-limited by IP address instead of API key. Limit: 10 reports per hour, 2 per minute.

Request Body

{
  "phone_number": "15555550123",
  "report_type": "robocall",
  "details": "Automated call claiming to be IRS",
  "source": "my-website"
}

Parameters

Parameter Type Required Description
phone_number string Yes Phone number in E.164 or national format
report_type string No Type: "spam" (default), "robocall", "scam", "telemarketing", "fraud", "phishing"
details string No Description of the spam incident (max 1000 characters)
source string No Identifier for where the report is coming from (e.g., "my-app", "partner-site")

Successful Response

{
  "success": true,
  "message": "Thank you! Your spam report has been submitted.",
  "data": {
    "phone_number": "+15555550123",
    "report_type": "robocall",
    "total_reports": 5
  }
}

Error Response (Duplicate Report)

{
  "error": "You have already reported this number recently. Please wait before reporting again.",
  "code": "DUPLICATE_REPORT"
}

Parameters

Parameter Type Required Description
phone_number string Yes Phone number in E.164 format (+15555550123) or national format
report_type string No Type of spam: "spam" (default), "robocall", "scam", "telemarketing", "fraud", "phishing"
details string No Additional details about the spam incident (optional description)

Code Examples

Authenticated Spam Reporting

Python

import requests
import json
from datetime import datetime

url = "https://api-service.verirouteintel.io/api/v1/spam/report"
headers = {
    "Authorization": "Bearer YOUR_API_KEY",
    "Content-Type": "application/json"
}

data = {
    "phone_number": "15555550123",
    "report_type": "spam",
    "details": "Automated warranty call"
}

response = requests.post(url, headers=headers, json=data)
print(response.json())

JavaScript

const reportSpam = async () => {
  const response = await fetch('https://api-service.verirouteintel.io/api/v1/spam/report', {
    method: 'POST',
    headers: {
      'Authorization': 'Bearer YOUR_API_KEY',
      'Content-Type': 'application/json'
    },
    body: JSON.stringify({
      phone_number: '15555550123',
      report_type: 'spam',
      details: 'Automated warranty call'
    })
  });

  const result = await response.json();
  console.log(result);
};

cURL

curl -X POST https://api-service.verirouteintel.io/api/v1/spam/report \
  -H "Authorization: Bearer YOUR_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{
    "phone_number": "15555550123",
    "report_type": "spam",
    "details": "Automated warranty call"
  }'

Public Spam Reporting (No API Key)

Use these examples to report spam from public-facing applications without exposing your API key.

JavaScript (Frontend Form)

// No API key needed - perfect for landing pages!
async function reportSpamNumber(phoneNumber, reportType, details) {
  const response = await fetch('https://api-service.verirouteintel.io/api/v1/spam/report/public', {
    method: 'POST',
    headers: {
      'Content-Type': 'application/json'
    },
    body: JSON.stringify({
      phone_number: phoneNumber,
      report_type: reportType,  // spam, robocall, scam, etc.
      details: details,
      source: 'my-website'  // Identify your app
    })
  });

  const result = await response.json();
  if (result.success) {
    alert('Thank you! Your report has been submitted.');
  } else {
    alert('Error: ' + result.error);
  }
}

Python (Server-Side)

import requests

# Public endpoint - no API key required
url = "https://api-service.verirouteintel.io/api/v1/spam/report/public"
headers = {"Content-Type": "application/json"}

data = {
    "phone_number": "15555550123",
    "report_type": "robocall",
    "details": "Automated IRS scam call",
    "source": "my-app"  # Track where reports come from
}

response = requests.post(url, headers=headers, json=data)
print(response.json())
# {"success": true, "message": "Thank you! Your spam report has been submitted.", ...}

cURL (Public Endpoint)

# No Authorization header needed!
curl -X POST https://api-service.verirouteintel.io/api/v1/spam/report/public \
  -H "Content-Type: application/json" \
  -d '{
    "phone_number": "15555550123",
    "report_type": "scam",
    "details": "Caller claimed to be from the IRS",
    "source": "my-landing-page"
  }'

HTML Form Integration

<form id="spam-report-form">
  <input type="tel" id="phone" placeholder="Phone number" required>
  <select id="report-type">
    <option value="spam">Spam</option>
    <option value="robocall">Robocall</option>
    <option value="scam">Scam</option>
    <option value="telemarketing">Telemarketing</option>
  </select>
  <textarea id="details" placeholder="Describe the call..."></textarea>
  <button type="submit">Report Spam</button>
</form>

<script>
document.getElementById('spam-report-form').addEventListener('submit', async (e) => {
  e.preventDefault();

  const response = await fetch('https://api-service.verirouteintel.io/api/v1/spam/report/public', {
    method: 'POST',
    headers: {'Content-Type': 'application/json'},
    body: JSON.stringify({
      phone_number: document.getElementById('phone').value,
      report_type: document.getElementById('report-type').value,
      details: document.getElementById('details').value,
      source: 'my-website'
    })
  });

  const result = await response.json();
  alert(result.success ? 'Report submitted!' : result.error);
});
</script>

Error Handling

Common Error Responses

400 Bad Request - Invalid Phone Number

{
  "success": false,
  "error": "Invalid phone number format",
  "code": "INVALID_PHONE_NUMBER"
}

400 Bad Request - Invalid Report Type

{
  "error": "Invalid report_type. Must be one of: spam, robocall, scam, telemarketing, fraud, phishing",
  "code": "INVALID_REPORT_TYPE"
}

429 Too Many Requests - Rate Limit Exceeded

{
  "success": false,
  "error": "Rate limit exceeded. Maximum 50 reports per hour, 5 per minute.",
  "code": "RATE_LIMIT_EXCEEDED",
  "retry_after": 3600
}

429 Too Many Requests - Duplicate Report

{
  "error": "Duplicate report detected. You have already reported this number within the last 24 hours.",
  "code": "DUPLICATE_REPORT",
  "data": {
    "phone_number": "+15555550123",
    "last_reported": "2025-12-04T10:30:00.000000+00:00",
    "retry_after": "2025-12-05T10:30:00.000000+00:00"
  }
}

Rate Limits

To prevent abuse and ensure fair usage, the Spam Reporting API has the following rate limits:

  • 50 reports per hour per API key
  • 5 per minute per minute per API key
  • 1 report per phone number per 24 hours per API key (duplicate prevention)

Rate limit headers are included in all responses:

X-RateLimit-Limit: 50
X-RateLimit-Remaining: 49
X-RateLimit-Reset: 60

429 Too Many Requests

When rate limits are exceeded, the API returns a 429 status code:

{
  "error": "Rate limit exceeded",
  "message": "Too many requests. Please wait before making another request.",
  "retry_after": 60
}