InboxWarm API documentation
Reference documentation for InboxWarm's REST API. Use this alongside the InboxWarm API Postman collection.
On this page
Email Accounts
Warmup
Deliverability
Base URL#
https://app.inboxwarm.ai/api/v1Authentication#
InboxWarm uses a mixed authentication scheme depending on the HTTP method:
GET and DELETE requests — send your API key as the api_key query parameter.
POST and PATCH requests — send your API key as an apiKey field inside the JSON body.
Generate and manage keys from Developer kit > API Integration in the InboxWarm app. Each key grants full account access across every endpoint below.
Example — GET request:
GET https://app.inboxwarm.ai/api/v1/email-accounts?api_key=YOUR_API_KEYExample — POST request body:
{
"apiKey": "YOUR_API_KEY",
...
}Rate limits#
GET /rate-limit — this call does not count against your quota.Errors#
Errors follow a consistent shape:
{
"error_code": "validation_error",
"message": "One or more fields are invalid.",
"details": {}
}Common error_code values: validation_error (400), not_found (404), conflict (409), unprocessable (422).
Endpoint index#
Email Accounts
/email-accountsList Email AccountsPOST/email-accountsConnect Email AccountPOST/email-accounts/bulk-connectBulk Connect Email AccountsPOST/email-accounts/{emailAccountId}/disconnectDisconnect Email AccountDELETE/email-accounts/{emailAccountId}Delete Email AccountPOST/email-accounts/bulk-deleteBulk Delete Email AccountsGET/email-accounts/{emailAccountId}/statusGet Email Account StatusPOST/email-accounts/bulk-statusBulk Email Account StatusWarmup
/warmup-settings/{emailAccountId}Get Warmup SettingsPATCH/warmup-settings/{emailAccountId}Update Warmup SettingsGET/warmup-settings/languagesList Warmup LanguagesGET/warmup-settings/industriesList Warmup IndustriesPOST/warmup-settings/{emailAccountId}/startStart WarmupPOST/warmup-settings/{emailAccountId}/stopStop WarmupPOST/warmup-settings/bulk-actionBulk Warmup ActionPOST/warmup-settings/bulk-updateBulk Update Warmup SettingsGET/warmup-status/{emailAccountId}Warmup Activity HistoryDeliverability
System
Health Check#
https://app.inboxwarm.ai/api/v1/healthBasic liveness check for the API.
api_keyResponses
{
"status": "ok"
}Rate Limit Status#
https://app.inboxwarm.ai/api/v1/rate-limitCheck current rate-limit consumption without using up a request against your quota.
api_keyResponses
{
"limit": 20,
"remaining": 18,
"reset": 1752585600
}Email Accounts
List Email Accounts#
https://app.inboxwarm.ai/api/v1/email-accountsList connected email accounts with their current status. Supports search, pagination, and sorting. Use search to look up the emailAccountId for an address if you ever need to re-resolve it.
api_keyQuery parameters
searchSearch by email address or namestatusactive | warming | paused | error | auth-expiredsortsortByResponses
{
"items": [
{
"id": "12345",
"fromEmail": "john@yourcompany.com",
"fromName": "John Doe",
"type": "gmail",
"status": "warming",
"createdAt": "2026-06-01T10:00:00.000Z"
},
{
"id": "12346",
"fromEmail": "sales@yourcompany.com",
"fromName": "Sales Team",
"type": "microsoft",
"status": "active",
"createdAt": "2026-06-03T14:20:00.000Z"
}
],
"total": 2,
"page": 1,
"limit": 20,
"totalPages": 1
}Connect Email Account#
https://app.inboxwarm.ai/api/v1/email-accountsConnect a Gmail, Microsoft, or SMTP/IMAP account using SMTP/IMAP credentials (an app password works for Gmail and Microsoft). Store the returned emailAccountId — every other endpoint is keyed off it.
apiKeyRequest body
{
"apiKey": "{{apiKey}}",
"fromEmail": "john@yourcompany.com",
"fromName": "John Doe",
"type": "gmail",
"smtp": {
"host": "smtp.example.com",
"port": 587,
"password": "your-password",
"encryption": "TLS",
"userName": "smtp-username"
},
"imap": {
"host": "imap.example.com",
"port": 993,
"encryption": "SSL",
"userName": "imap-username"
}
}Responses
{
"emailAccountId": "12345",
"fromEmail": "john@yourcompany.com",
"fromName": "John Doe",
"type": "gmail",
"status": "active"
}Bulk Connect Email Accounts#
https://app.inboxwarm.ai/api/v1/email-accounts/bulk-connectConnect up to 20 accounts in one call. Each entry is validated and connected independently — one bad or duplicate account doesn't stop the others — and the response reports success or failure per account, in the same order as the input.
apiKeyRequest body
{
"apiKey": "{{apiKey}}",
"emailAccounts": [
{
"fromEmail": "john@yourcompany.com",
"fromName": "John Doe",
"type": "gmail",
"smtp": { "host": "smtp.example.com", "port": 587, "password": "your-password", "encryption": "TLS", "userName": "smtp-username" },
"imap": { "host": "imap.example.com", "port": 993, "encryption": "SSL", "userName": "imap-username" }
},
{
"fromEmail": "sales@yourcompany.com",
"type": "microsoft",
"smtp": { "password": "app-specific-password" }
}
]
}Responses
{
"results": [
{
"success": true,
"emailAccountId": "12345",
"fromEmail": "john@yourcompany.com",
"fromName": "John Doe",
"type": "gmail",
"status": "active"
},
{
"success": false,
"fromEmail": "sales@yourcompany.com",
"error_code": "already_connected",
"message": "This email address is already connected.",
"details": {}
}
]
}Disconnect Email Account#
https://app.inboxwarm.ai/api/v1/email-accounts/{emailAccountId}/disconnectPause an account without deleting it. Config and history are preserved for reconnecting later.
apiKeyRequest body
{
"apiKey": "{{apiKey}}"
}Responses
{
"emailAccountId": "12345",
"status": "disconnected"
}Delete Email Account#
https://app.inboxwarm.ai/api/v1/email-accounts/{emailAccountId}Permanently remove an account and all associated warmup data and history.
api_keyResponses
No response body
Bulk Delete Email Accounts#
https://app.inboxwarm.ai/api/v1/email-accounts/bulk-deletePermanently remove up to 20 accounts in one call.
apiKeyRequest body
{
"apiKey": "{{apiKey}}",
"emailAccountIds": [
"12345",
"12346"
]
}Responses
{
"results": [
{
"emailAccountId": "12345",
"deleted": true
},
{
"emailAccountId": "12346",
"deleted": true
}
]
}Get Email Account Status#
https://app.inboxwarm.ai/api/v1/email-accounts/{emailAccountId}/statusDetailed status for a single account — connection health, warmup state, auth status, active errors.
api_keyResponses
{
"emailAccountId": "12345",
"fromEmail": "john@yourcompany.com",
"type": "gmail",
"authStatus": "connected",
"warmupStatus": "active",
"healthScore": 92,
"connectionError": null,
"lastConnectedAt": "2026-07-15T08:00:00.000Z"
}Bulk Email Account Status#
https://app.inboxwarm.ai/api/v1/email-accounts/bulk-statusStatus for up to 50 accounts in one call, returned in the same order as the input IDs.
apiKeyRequest body
{
"apiKey": "{{apiKey}}",
"emailAccountIds": [
"12345",
"12346"
]
}Responses
{
"results": [
{
"emailAccountId": "12345",
"fromEmail": "john@yourcompany.com",
"type": "gmail",
"authStatus": "connected",
"warmupStatus": "active",
"healthScore": 92,
"connectionError": null,
"lastConnectedAt": "2026-07-15T08:00:00.000Z"
},
{
"emailAccountId": "12346",
"fromEmail": "sales@yourcompany.com",
"type": "microsoft",
"authStatus": "connected",
"warmupStatus": "paused",
"healthScore": 81,
"connectionError": null,
"lastConnectedAt": "2026-07-14T22:10:00.000Z"
}
]
}Warmup
Get Warmup Settings#
https://app.inboxwarm.ai/api/v1/warmup-settings/{emailAccountId}Fetch the current warmup configuration for an account.
api_keyResponses
{
"emailAccountId": "12345",
"displayName": "Ada Lovelace",
"timeZone": "America/New_York",
"sendingDays": [1, 2, 3, 4, 5],
"sendingWindowStartTime": "09:00",
"sendingWindowEndTime": "17:00",
"warmupLanguage": "en",
"targetIndustry": "saas_software",
"warmupTopics": ["Referral request", "Case study"]
}Update Warmup Settings#
https://app.inboxwarm.ai/api/v1/warmup-settings/{emailAccountId}Update one or more warmup settings for an account — sender name, timezone, sending schedule, language, industry, or topics. Only the fields you send are changed.
apiKeyRequest body
{
"apiKey": "{{apiKey}}",
"displayName": "Ada Lovelace",
"timeZone": "America/New_York",
"sendingDays": [1, 2, 3, 4, 5],
"sendingWindowStartTime": "09:00",
"sendingWindowEndTime": "17:00",
"warmupLanguage": "en",
"targetIndustry": "saas_software",
"warmupTopics": ["Referral request", "Case study"]
}Responses
{
"emailAccountId": "12345",
"displayName": "Ada Lovelace",
"timeZone": "America/New_York",
"sendingDays": [1, 2, 3, 4, 5],
"sendingWindowStartTime": "09:00",
"sendingWindowEndTime": "17:00",
"warmupLanguage": "en",
"targetIndustry": "saas_software",
"warmupTopics": ["Referral request", "Case study"]
}List Warmup Languages#
https://app.inboxwarm.ai/api/v1/warmup-settings/languagesList every language warmup content can be generated in, so you know which values warmupLanguage accepts.
api_keyResponses
{
"languages": [
{ "code": "en", "name": "English", "nativeName": "English", "script": "Latin" },
{ "code": "es", "name": "Spanish", "nativeName": "Español", "script": "Latin" },
{ "code": "ja", "name": "Japanese", "nativeName": "日本語", "script": "Japanese" }
]
}List Warmup Industries#
https://app.inboxwarm.ai/api/v1/warmup-settings/industriesList every target industry and its suggested topics, so you know which values targetIndustry and warmupTopics accept.
api_keyResponses
{
"industries": [
{
"key": "e_commerce",
"name": "E-Commerce",
"topics": [
"Abandoned cart follow-up",
"New product launch",
"Seasonal sale announcement",
"Order and shipping update",
"Customer review request"
]
},
{
"key": "saas_software",
"name": "SaaS / Software",
"topics": ["Feature announcement", "Onboarding tip", "Case study"]
}
]
}Start Warmup#
https://app.inboxwarm.ai/api/v1/warmup-settings/{emailAccountId}/startStart warmup for an account.
apiKeyRequest body
{
"apiKey": "{{apiKey}}"
}Responses
{
"emailAccountId": "12345",
"warmupStatus": "active"
}Stop Warmup#
https://app.inboxwarm.ai/api/v1/warmup-settings/{emailAccountId}/stopStop warmup for an account.
apiKeyRequest body
{
"apiKey": "{{apiKey}}"
}Responses
{
"emailAccountId": "12345",
"warmupStatus": "paused"
}Bulk Warmup Action#
https://app.inboxwarm.ai/api/v1/warmup-settings/bulk-actionStart or stop warmup for up to 50 accounts in one call.
apiKeyRequest body
{
"apiKey": "{{apiKey}}",
"emailAccountIds": [
"12345",
"12346"
],
"action": "start"
}Responses
{
"results": [
{
"emailAccountId": "12345",
"status": "ok"
},
{
"emailAccountId": "12346",
"status": "ok"
}
]
}Bulk Update Warmup Settings#
https://app.inboxwarm.ai/api/v1/warmup-settings/bulk-updateApply schedule and/or content settings to up to 50 accounts in one call.
apiKeyRequest body
{
"apiKey": "{{apiKey}}",
"emailAccountIds": [
"12345",
"12346"
],
"apply": ["language", "window"],
"warmupLanguage": "es",
"sendingWindowStartTime": "06:00",
"sendingWindowEndTime": "10:00"
}Responses
{
"updatedCount": 2
}Warmup Activity History#
https://app.inboxwarm.ai/api/v1/warmup-status/{emailAccountId}Today's warmup activity for an account: sent, received, replied, spam, bounced.
api_keyResponses
{
"emailAccountId": "12345",
"date": "2026-07-15",
"current": "active",
"dailySendingLimit": 10,
"sent": 12,
"received": 10,
"replied": 7,
"spam": 1,
"bounced": 0
}Deliverability
Get Setup Score#
https://app.inboxwarm.ai/api/v1/setup-score/{emailAccountId}Cached setup health score (DMARC, SPF, DKIM, MX, blacklist checks) for an account.
api_keyResponses
{
"emailAccountId": "12345",
"emailAccountScore": 86,
"dmarcScore": 15,
"spfScore": 29,
"dkimScore": 18,
"mxRecordScore": 9,
"ipBlacklistScore": 5,
"domainBlacklistScore": 10,
"updatedAt": "2026-07-14T10:30:00.000Z",
"manualLastRefreshedAt": "2026-07-14T10:30:00.000Z"
}Refresh Setup Score#
https://app.inboxwarm.ai/api/v1/setup-score/{emailAccountId}/refreshSynchronously recompute the setup score for an account.
apiKeyRequest body
{
"apiKey": "{{apiKey}}"
}Responses
{
"emailAccountId": "12345",
"emailAccountScore": 88,
"dmarcScore": 15,
"spfScore": 29,
"dkimScore": 18,
"mxRecordScore": 9,
"ipBlacklistScore": 7,
"domainBlacklistScore": 10,
"updatedAt": "2026-07-15T09:00:00.000Z",
"manualLastRefreshedAt": "2026-07-15T09:00:00.000Z"
}DNS Health Check#
https://app.inboxwarm.ai/api/v1/dns-health/{emailAccountId}Live DNS lookup for the account's sending domain — pass/fail for SPF, DKIM, DMARC, MX.
api_keyResponses
{
"emailAccountId": "12345",
"spf": "pass",
"dkim": "pass",
"dmarc": "pass",
"mx": "pass",
"cachedAt": "2026-07-15T09:00:00.000Z"
}Get Deliverability Score#
https://app.inboxwarm.ai/api/v1/deliverability-score/{emailAccountId}Overall and per-ESP inbox-vs-spam deliverability rate for a date range.
apiKeyRequest body
{
"apiKey": "{{apiKey}}",
"startDate": "2026-06-01",
"endDate": "2026-06-30",
"esps": [
"gmail",
"outlook",
"other"
]
}Responses
{
"emailAccountId": "12345",
"totalDeliverabilityRate": 88,
"totalSentCount": 1500,
"totalInboxCount": 1320,
"totalSpamInboxCount": 180,
"gmail": {
"deliverabilityRate": 92,
"sentCount": 500,
"inboxCount": 460,
"spamCount": 40
},
"outlook": {
"deliverabilityRate": 92,
"sentCount": 500,
"inboxCount": 460,
"spamCount": 40
},
"other": {
"deliverabilityRate": 92,
"sentCount": 500,
"inboxCount": 460,
"spamCount": 40
}
}Reports
Dashboard#
https://app.inboxwarm.ai/api/v1/dashboardAccount-wide warmup summary across all connected inboxes.
api_keyResponses
{
"totalAccounts": 42,
"activeWarmups": 30,
"pausedWarmups": 8,
"accountsWithErrors": 2,
"avgSetupScore": 78.5
}Single Account Report#
https://app.inboxwarm.ai/api/v1/reportsDaily warmup report for one account over a date range.
apiKeyRequest body
{
"apiKey": "{{apiKey}}",
"emailAccountId": "12345",
"from": "2026-06-01",
"to": "2026-06-30"
}Responses
{
"emailAccountId": "12345",
"from": "2026-06-01",
"to": "2026-06-30",
"days": [
{
"date": "2026-06-15",
"sent": 25,
"inbox": 20,
"received": 22,
"spam": 3,
"bounced": 1,
"undelivered": 0,
"replied": 5,
"deliverabilityRate": 92.5
}
]
}Bulk Report#
https://app.inboxwarm.ai/api/v1/reports/bulkDaily warmup reports for up to 50 accounts over a date range.
apiKeyRequest body
{
"apiKey": "{{apiKey}}",
"emailAccountIds": [
"12345",
"12346"
],
"from": "2026-06-01",
"to": "2026-06-30"
}Responses
{
"reports": [
{
"emailAccountId": "12345",
"from": "2026-06-01",
"to": "2026-06-30",
"days": [
{
"date": "2026-06-15",
"sent": 25,
"inbox": 20,
"received": 22,
"spam": 3,
"bounced": 1,
"undelivered": 0,
"replied": 5,
"deliverabilityRate": 92.5
}
]
}
]
}Export Report#
https://app.inboxwarm.ai/api/v1/reports/exportKick off an async CSV export of warmup reports, delivered by email when ready.
apiKeyRequest body
{
"apiKey": "{{apiKey}}",
"emailAccountIds": [
"12345",
"12346"
],
"from": "2026-06-01",
"to": "2026-06-30"
}Responses
{
"jobId": "a1b2c3d4",
"status": "queued"
}