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

  1. Create a test — POST to /api/v1/tests
  2. Send an email to the provided test address
  3. 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

POST /api/v1/tests

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 /api/v1/tests/{test_id}

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 /api/v1/tests/{test_id}/raw

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 /api/v1/tests/{test_id}

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
9.0–10: Excellent 7.0–8.9: Good 0–6.9: Needs Improvement

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": true in 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.