Skip to main content

Send Accounts

Connect and manage email accounts used for outreach sequences and warmup campaigns. Monitor deliverability health including DNS authentication, blacklist status, and sender reputation.

API Playground

tip

Try this endpoint live in the API Playground.

List Send Accounts

Retrieve all connected email accounts with their current status.

Endpoint

GET /v1/send-accounts

Headers

HeaderValue
AuthorizationBearer cdb_your_api_key

Query Parameters

ParameterTypeRequiredDescription
statusstringNoFilter by status: active, paused, error, warming
providerstringNoFilter by provider: gmail, outlook, smtp
pageintegerNoPage number (default: 1)
per_pageintegerNoResults per page (default: 25, max: 100)

Example Request

curl -X GET \
-H "Authorization: Bearer cdb_your_api_key_here" \
"https://api.crondb.com/v1/send-accounts?status=active"

Python

import requests

response = requests.get(
"https://api.crondb.com/v1/send-accounts",
headers={"Authorization": "Bearer cdb_your_api_key_here"},
params={"status": "active"},
)

data = response.json()
for account in data["accounts"]:
print(f"{account['email']}{account['status']} ({account['provider']})")

Node.js

const response = await fetch(
"https://api.crondb.com/v1/send-accounts?status=active",
{ headers: { Authorization: "Bearer cdb_your_api_key_here" } }
);

const data = await response.json();
data.accounts.forEach((a) => console.log(`${a.email}${a.status}`));

Response

{
"accounts": [
{
"id": "sa_abc123",
"email": "sales@yourcompany.com",
"provider": "gmail",
"status": "active",
"warmup_enabled": true,
"warmup_progress_pct": 68,
"daily_send_limit": 50,
"emails_sent_today": 12,
"connected_at": "2026-02-10T08:30:00Z",
"last_activity_at": "2026-03-22T14:15:00Z"
},
{
"id": "sa_def456",
"email": "outreach@yourcompany.com",
"provider": "smtp",
"status": "warming",
"warmup_enabled": true,
"warmup_progress_pct": 35,
"daily_send_limit": 30,
"emails_sent_today": 8,
"connected_at": "2026-03-01T12:00:00Z",
"last_activity_at": "2026-03-22T13:45:00Z"
}
],
"total": 2,
"page": 1,
"per_page": 25
}

Response Fields

FieldTypeDescription
accountsarrayArray of send account objects
accounts[].idstringUnique account identifier
accounts[].emailstringEmail address
accounts[].providerstringEmail provider (gmail, outlook, smtp)
accounts[].statusstringAccount status: active, paused, error, warming
accounts[].warmup_enabledbooleanWhether smart warmup is enabled
accounts[].warmup_progress_pctnumberWarmup completion percentage
accounts[].daily_send_limitintegerCurrent daily sending limit
accounts[].emails_sent_todayintegerEmails sent in the current day
totalintegerTotal number of accounts

Connect Send Account

Connect a new email account via SMTP/IMAP credentials for use in outreach and warmup.

Endpoint

POST /v1/send-accounts

Headers

HeaderValue
AuthorizationBearer cdb_your_api_key
Content-Typeapplication/json

Body Parameters

ParameterTypeRequiredDescription
emailstringYesEmail address to connect
display_namestringNoSender display name
smtp_hoststringYesSMTP server hostname
smtp_portintegerYesSMTP server port (typically 587 or 465)
smtp_usernamestringYesSMTP authentication username
smtp_passwordstringYesSMTP authentication password or app password
smtp_encryptionstringNoEncryption type: tls (default), ssl, none
imap_hoststringYesIMAP server hostname
imap_portintegerYesIMAP server port (typically 993)
imap_usernamestringNoIMAP username (defaults to smtp_username)
imap_passwordstringNoIMAP password (defaults to smtp_password)
enable_warmupbooleanNoStart smart warmup immediately (default: false)
daily_send_limitintegerNoMax emails per day (default: 50)

Example Request

curl -X POST \
-H "Authorization: Bearer cdb_your_api_key_here" \
-H "Content-Type: application/json" \
-d '{
"email": "outreach@yourcompany.com",
"display_name": "Alex from YourCompany",
"smtp_host": "smtp.gmail.com",
"smtp_port": 587,
"smtp_username": "outreach@yourcompany.com",
"smtp_password": "your_app_password",
"smtp_encryption": "tls",
"imap_host": "imap.gmail.com",
"imap_port": 993,
"enable_warmup": true,
"daily_send_limit": 30
}' \
"https://api.crondb.com/v1/send-accounts"

Python

import requests

response = requests.post(
"https://api.crondb.com/v1/send-accounts",
headers={"Authorization": "Bearer cdb_your_api_key_here"},
json={
"email": "outreach@yourcompany.com",
"display_name": "Alex from YourCompany",
"smtp_host": "smtp.gmail.com",
"smtp_port": 587,
"smtp_username": "outreach@yourcompany.com",
"smtp_password": "your_app_password",
"imap_host": "imap.gmail.com",
"imap_port": 993,
"enable_warmup": True,
},
)

data = response.json()
print(f"Connected: {data['id']}{data['status']}")

Response

{
"id": "sa_ghi789",
"email": "outreach@yourcompany.com",
"display_name": "Alex from YourCompany",
"provider": "gmail",
"status": "active",
"warmup_enabled": true,
"warmup_progress_pct": 0,
"daily_send_limit": 30,
"smtp_verified": true,
"imap_verified": true,
"connected_at": "2026-03-22T15:00:00Z",
"message": "Account connected successfully. Smart warmup will begin within the hour."
}

Error Responses

StatusDescription
400Invalid SMTP/IMAP configuration or missing required fields
401Invalid or missing API key
409Email address already connected
422SMTP or IMAP connection test failed

Get Deliverability Report

Get a detailed deliverability health report for a specific send account, including DNS authentication status, blacklist checks, and sender reputation.

Endpoint

GET /v1/send-accounts/{id}/warmup/deliverability

Headers

HeaderValue
AuthorizationBearer cdb_your_api_key

Path Parameters

ParameterTypeRequiredDescription
idstringYesSend account ID

Example Request

curl -X GET \
-H "Authorization: Bearer cdb_your_api_key_here" \
"https://api.crondb.com/v1/send-accounts/sa_abc123/warmup/deliverability"

Python

import requests

account_id = "sa_abc123"
response = requests.get(
f"https://api.crondb.com/v1/send-accounts/{account_id}/warmup/deliverability",
headers={"Authorization": "Bearer cdb_your_api_key_here"},
)

data = response.json()
print(f"Overall score: {data['overall_score']}/100")
for check in data["dns_authentication"]:
status = "PASS" if check["passed"] else "FAIL"
print(f" {check['type']}: {status}")

Response

{
"account_id": "sa_abc123",
"email": "sales@yourcompany.com",
"overall_score": 92,
"checked_at": "2026-03-22T14:00:00Z",
"dns_authentication": [
{
"type": "SPF",
"passed": true,
"record": "v=spf1 include:_spf.google.com ~all",
"details": "Valid SPF record found"
},
{
"type": "DKIM",
"passed": true,
"selector": "google",
"details": "DKIM signature verified"
},
{
"type": "DMARC",
"passed": true,
"policy": "quarantine",
"record": "v=DMARC1; p=quarantine; rua=mailto:dmarc@yourcompany.com",
"details": "DMARC policy set to quarantine"
}
],
"blacklist_check": {
"listed": false,
"checked_lists": 12,
"clean_lists": 12,
"flagged_lists": []
},
"reputation": {
"sender_score": 88,
"inbox_placement_rate": 96.2,
"spam_complaint_rate": 0.02,
"bounce_rate": 0.5,
"domain_age_days": 450
},
"recommendations": [
"Consider upgrading DMARC policy from 'quarantine' to 'reject' for stronger protection",
"Sender score is healthy — maintain current sending patterns"
]
}

Response Fields

FieldTypeDescription
overall_scoreintegerDeliverability health score (0-100)
checked_atstringWhen the report was last generated
dns_authenticationarraySPF, DKIM, and DMARC check results
dns_authentication[].typestringAuthentication type: SPF, DKIM, DMARC
dns_authentication[].passedbooleanWhether the check passed
blacklist_checkobjectResults of blacklist monitoring
blacklist_check.listedbooleanWhether the domain appears on any blacklist
blacklist_check.flagged_listsarrayNames of blacklists where the domain is listed
reputationobjectSender reputation metrics
reputation.sender_scoreintegerSender score (0-100)
recommendationsarrayActionable suggestions to improve deliverability

Reputation History

Daily reputation snapshots for a send account. Powers the warmup-dashboard trajectory chart and lets you spot deliverability drift before it shows up as bounce-rate spikes. The maintenance worker writes one row per (account, date) pair every 24 hours.

Endpoint

GET /v1/send-accounts/{id}/warmup/reputation-history

Headers

HeaderValue
AuthorizationBearer cdb_your_api_key

Path Parameters

ParameterTypeRequiredDescription
idintegerYesSend account ID.

Query Parameters

ParameterTypeRequiredDescription
daysintegerNoLookback window. 7–180, default 30.

Example Request

curl -X GET \
-H "Authorization: Bearer cdb_your_api_key_here" \
"https://api.crondb.com/v1/send-accounts/12/warmup/reputation-history?days=30"

Python

import requests

response = requests.get(
"https://api.crondb.com/v1/send-accounts/12/warmup/reputation-history",
headers={"Authorization": "Bearer cdb_your_api_key_here"},
params={"days": 30},
)

data = response.json()
for point in data["points"]:
print(f"{point['date']}: score={point['reputation_score']}, "
f"bounce={point['bounce_rate']}%")

Response

{
"account_id": 12,
"days": 30,
"points": [
{
"date": "2026-04-06",
"reputation_score": 87,
"bounce_rate": 0.6,
"complaint_rate": 0.01,
"total_sent": 142
},
{
"date": "2026-04-07",
"reputation_score": 88,
"bounce_rate": 0.4,
"complaint_rate": 0.0,
"total_sent": 156
}
]
}

Response Fields

FieldTypeDescription
account_idintegerThe send account being queried.
daysintegerEchoes the lookback window applied.
pointsarrayOne entry per day where activity was logged. Days with zero sends are not included.
points[].datestringISO-8601 date (UTC).
points[].reputation_scoreinteger0–100 reputation score on that day.
points[].bounce_ratenumber|nullPercentage. null when no sends occurred.
points[].complaint_ratenumber|nullPercentage of recipients marking the message as spam.
points[].total_sentintegerSend volume on that day.

The series is ordered by date ascending so the response is chart-ready without further processing.

Notes

  • Send account endpoints require the Starter plan or higher
  • SMTP/IMAP credentials are encrypted at rest and never returned in API responses
  • Deliverability reports are cached for 1 hour; repeated requests within that window return cached results
  • Blacklist checks scan 12+ major blacklist providers
  • For Gmail accounts, use an App Password rather than your account password
  • Reputation history is populated by the workflow maintenance worker (runs hourly). New send accounts will see their first data point appear within ~24 hours of first use.

Next Steps