Authentication
All API requests require an API key passed in the Authorization header.
API keys are created from your dashboard. Each key is tied to your account and shares its scan quota.
Authorization: Bearer sa_live_your_api_key_here
Security: Keep your API key secret. Do not expose it in client-side code, public repositories, or logs. If compromised, delete it immediately from your dashboard and create a new one.
Rate limits
| Scan creation | 5 requests / minute + daily plan quota |
| Other endpoints | 30 requests / minute |
When a limit is exceeded, the API returns 429 Too Many Requests.
Errors
Errors return a JSON body with a detail field:
{ "detail": "Invalid API key" }
| Code | Meaning |
|---|---|
| 400 | Bad request (missing or invalid parameters) |
| 401 | Invalid or missing API key |
| 404 | Resource not found |
| 429 | Rate limit or daily quota exceeded |
| 500 | Internal server error |
Endpoint reference
Every endpoint is generated from the API itself, so it cannot drift from what the service actually accepts. Paste your API key once on that page and call any of them from there.
Calls you send from there are real. They run against production with the key you provide, count against your quotas, and operations marked as destructive delete data for good. There is no sandbox.
Prefer the raw schema? Download the OpenAPI document and generate a client from it.
Typical flow
Create a scan
POST /scans - get back the target email address.
Send your email
Send a test email to the returned address using your mail infrastructure.
Poll for completion
GET /scans/{local_part} - poll every 5 seconds until status is completed.
Fetch results
GET /scans/{local_part}/results - retrieve the full deliverability report.
Complete example (bash)
#!/bin/bash
API_KEY="sa_live_YOUR_KEY"
BASE="https://senderaudit.com/api/v1"
# 1. Create scan
RESPONSE=$(curl -s -X POST "$BASE/scans" \
-H "Authorization: Bearer $API_KEY" \
-H "Content-Type: application/json" \
-d '{}')
LOCAL=$(echo "$RESPONSE" | jq -r '.local_part')
EMAIL=$(echo "$RESPONSE" | jq -r '.email_address')
echo "Send your email to: $EMAIL"
echo "Waiting for analysis..."
# 2. Send your email (via your SMTP server)
# echo "Test" | mail -s "Deliverability check" "$EMAIL"
# 3. Poll until completed
while true; do
STATUS=$(curl -s "$BASE/scans/$LOCAL" \
-H "Authorization: Bearer $API_KEY" | jq -r '.status')
[ "$STATUS" = "completed" ] && break
[ "$STATUS" = "failed" ] && echo "Scan failed" && exit 1
sleep 5
done
# 4. Get results
curl -s "$BASE/scans/$LOCAL/results" \
-H "Authorization: Bearer $API_KEY" | jq '.scores'