Get the email provider
GET /v1/email-provider · permission email-provider:read · all plans
Returns how the environment sends email: the delivery mode, the sender address, your own SMTP server or email provider, and the last connection test.
The credential (SMTP password or API key) is never returned, not even masked or as a length. credentials_set only says whether one is stored.
An environment that has never been configured returns platform_default with version 0. The ETag header carries the version; send it as If-Match when you replace the configuration.
Response
200 OK with the configuration and ETag set to its version.
| Field | Type | Description |
|---|---|---|
mode |
string | platform_default, platform_managed_domain, customer_smtp, customer_api or customer_webhook. |
sender_domain_id |
string or null | platform_managed_domain: the sender domain (sdom_…) mail is sent from; null in every other mode. Read the domain to see its current status. |
webhook_endpoint_id |
string or null | customer_webhook: the webhook endpoint (whe_…) that receives the rendered messages; null in every other mode. Read the endpoint to see whether it is still enabled. |
from_address |
string or null | Bare sender address; null in platform_default. |
reply_to |
string or null | Bare reply-to address. |
provider |
string or null | customer_api provider: ses, sendgrid, postmark, mailgun or brevo. |
smtp_host |
string or null | customer_smtp server host name. |
smtp_port |
integer or null | customer_smtp port: 465 (implicit TLS) or 587 (STARTTLS). |
smtp_username |
string or null | customer_smtp AUTH user name. It is not secret. |
credentials_set |
boolean | Whether a credential is stored. |
last_test_at |
string or null | Time of the last connection test; cleared when the configuration changes. |
last_test_result |
string or null | ok or the fixed error code of the last test. |
version |
integer | Configuration version, the same as the ETag; 0 means never configured. |
updated_at |
string or null | Time of the last change. |
{
"mode": "customer_smtp",
"sender_domain_id": null,
"webhook_endpoint_id": null,
"from_address": "no-reply@example.com",
"reply_to": null,
"provider": null,
"smtp_host": "smtp.example.com",
"smtp_port": 587,
"smtp_username": "mailer",
"credentials_set": true,
"last_test_at": "2026-10-19T09:30:00Z",
"last_test_result": "ok",
"version": 4,
"updated_at": "2026-10-19T09:00:00Z"
}
A platform_managed_domain configuration:
{
"mode": "platform_managed_domain",
"sender_domain_id": "sdom_01k7xq3m5r8t9v0w1x2y3z4a5b",
"webhook_endpoint_id": null,
"from_address": "auth@mail.example.com",
"reply_to": "support@example.com",
"provider": null,
"smtp_host": null,
"smtp_port": null,
"smtp_username": null,
"credentials_set": false,
"last_test_at": null,
"last_test_result": null,
"version": 5,
"updated_at": "2026-10-19T10:00:00Z"
}
A customer_webhook configuration:
{
"mode": "customer_webhook",
"sender_domain_id": null,
"webhook_endpoint_id": "whe_01k7xq3m5r8t9v0w1x2y3z4a5b",
"from_address": "auth@example.com",
"reply_to": null,
"provider": null,
"smtp_host": null,
"smtp_port": null,
"smtp_username": null,
"credentials_set": false,
"last_test_at": null,
"last_test_result": null,
"version": 6,
"updated_at": "2026-10-27T09:00:00Z"
}
Errors
| HTTP | code | When |
|---|---|---|
| 401 | unauthenticated |
The credential is missing, invalid or revoked. |
| 403 | insufficient_permissions |
The credential lacks the required permission. |
| 429 | rate_limited |
The rate limit was exceeded; retry after the Retry-After period. |
| 503 | service_unavailable |
A dependency is temporarily unavailable; retry after the Retry-After period. |
Example
curl https://api.eu.keenauth.com/v1/email-provider \
-H "Authorization: Bearer $KEENAUTH_SECRET_KEY"
CLI: keenauth email-provider get