SpamChap API
Test your email deliverability, spam score, and authentication (SPF, DKIM, DMARC)
Overview
SpamChap is an email deliverability testing service that analyzes your emails for spam characteristics and authentication issues. Send test emails and get detailed reports with scores from 0–10.
Quick Start
- Create a test — POST to
/api/v1/tests - Send an email to the provided test address
- Get results — GET
/api/v1/tests/{test_id}
# Step 1: Create a test
$ curl -X POST https://spamchap.com/api/v1/tests
# Step 2: Send your email to test-abc123...@spamchap.com
# Step 3: Get results
$ curl https://spamchap.com/api/v1/tests/abc123...
API Endpoints
Create a new email test
Creates a unique test with a dedicated email address. Tests expire after 24 hours.
Show response
{
"success": true,
"data": {
"test_id": "ef72bbf61f97e29ec07df5934c3c6e64",
"email_address": "test-ef72bbf61f97e29ec07df5934c3c6e64@spamchap.com",
"status": "pending",
"created_at": "2025-11-03T14:59:42+00:00",
"expires_at": "2025-11-04T14:59:42+00:00"
}
}
Get test results
Retrieves the analysis results for a test. Status will be "pending", "processing", "completed", or "failed".
Show response
{
"success": true,
"data": {
"test_id": "ef72bbf61f97e29ec07df5934c3c6e64",
"email_address": "test-ef72bbf61f97e29ec07df5934c3c6e64@spamchap.com",
"status": "completed",
"score": 10.0,
"created_at": "2025-11-03T14:59:42+00:00",
"expires_at": "2025-11-04T14:59:42+00:00",
"results": [
{"category": "SpamAssassin", "status": "pass", "message": "Email passed spam check", "score_impact": 3.5},
{"category": "SPF", "status": "pass", "message": "SPF pass: 203.0.113.10 is authorized to send for example.com.", "score_impact": 1.25},
{"category": "DKIM", "status": "pass", "message": "DKIM signature verified (2048-bit key) and aligned with the From domain.", "score_impact": 1.25},
{"category": "DMARC", "status": "pass", "message": "DMARC pass with an enforcing policy (p=reject) — SPF and DKIM alignment.", "score_impact": 0.5},
{"category": "Headers", "status": "pass", "message": "All required headers present", "score_impact": 0.25}
],
"checks": [
{"check_name": "SpamAssassin", "result": "pass", "details": {"message": "Email passed spam check", "score": -4.9, "required": 5, "tests": ["DKIM_SIGNED", "DKIM_VALID"]}},
{"check_name": "blocklist", "result": "pass", "details": {"message": "Blocklist check could not be completed.", "unchecked": true}}
]
}
}
Get raw email
Retrieves the original raw email that was received. Returns the raw message as text/plain (not JSON) on success; only error responses are JSON.
Show response
Received: from mail-sender.example.com (mail-sender.example.com [203.0.113.10])
by mx.spamchap.com with ESMTP id 4XyZab12;
Mon, 03 Nov 2025 14:59:42 +0000 (UTC)
From: sender@example.com
To: test-ef72bbf61f97e29ec07df5934c3c6e64@spamchap.com
Subject: Test message
Date: Mon, 03 Nov 2025 14:59:42 +0000
Message-ID: <a1b2c3@example.com>
Content-Type: text/plain; charset=UTF-8
This is the plain-text body of the received email.
Delete a test
Permanently deletes a test and all associated data. Only the creator IP can delete.
Show response
{
"success": true,
"message": "Test deleted successfully"
}
Scoring System
Weighted scoring system, 0–10 scale (higher is better):
| Component | Weight | Max | Description |
|---|---|---|---|
| SpamAssassin | 35% | 3.5 | Content analysis incl. Razor2/Pyzor collaborative filtering — every fired rule and its points shown on the report |
| SPF | 12.5% | 1.25 | Full RFC 7208 evaluation of your sending IP against the record |
| DKIM | 12.5% | 1.25 | Cryptographic signature verification + From-domain alignment |
| Blocklist (IP) | 12.5% | 1.25 | Sending IP checked against 6 DNS blocklists (IPv4 + IPv6) |
| DMARC | 5% | 0.5 | Record discovery, identifier alignment and policy strength |
| Domain blocklist | 5% | 0.5 | From + linked domains checked against DBL/SURBL/URIBL |
| Reverse DNS | 5% | 0.5 | PTR record + forward-confirmation (FCrDNS) |
| MX | 2.5% | 0.25 | Your From domain can receive replies and bounces |
| List-Unsubscribe | 2.5% | 0.25 | RFC 8058 one-click unsubscribe headers |
| Links | 2.5% | 0.25 | Broken links, shorteners, insecure http, phishing patterns |
| HTML | 2.5% | 0.25 | Plain-text alternative, image balance, Gmail clipping |
| Headers | 2.5% | 0.25 | Required headers, Reply-To and Message-ID sanity |
Error Responses
All errors return JSON with appropriate HTTP status codes:
{
"success": false,
"error": "Test not found"
}
Status Codes
200 OK
Request successful
201 Created
Test created successfully
404 Not Found
Test not found or expired
429 Too Many Requests
Rate limit exceeded (10/hour per IP)
500 Internal Server Error
Server error
Rate Limits & Notes
- Tests expire after 24 hours
- Maximum email size: 10 MB
- Processing typically completes within seconds
- No authentication required (public API)
- Rate limited to 10 test creations per hour per IP
- Delete restricted to the IP that created the test
-
If a check cannot be completed on our side (a DNS timeout, a verifier outage) it is given full credit so our problem never costs you points — and it is reported as not verified, never as a pass. In the API those checks carry
"unchecked": truein their details; on the report page they show as NO DATA and are excluded from the Gmail & Yahoo compliance count. Re-run the test for a complete picture. - SpamChap grades the message you send and its authentication. It cannot measure sending reputation over time or inbox placement, so a high score means nothing is wrong with the message — not a guarantee of the inbox.