
# Obtener el proveedor de correo electrónico

`GET /v1/email-provider` · permiso `email-provider:read` · todos los planes

Devuelve cómo envía correos el entorno: el modo de envío, la dirección del remitente, su propio servidor SMTP o proveedor de correo electrónico y la última prueba de conexión.

La credencial (contraseña SMTP o clave de API) nunca se devuelve, ni siquiera enmascarada ni con su longitud. `credentials_set` solo indica si hay una almacenada.

Un entorno que nunca se ha configurado devuelve `platform_default` con la versión `0`. El encabezado `ETag` contiene la versión; envíela como `If-Match` cuando [reemplace](put.md) la configuración.

## Respuesta

`200 OK` con la configuración y `ETag` con su versión.

| Campo | Tipo | Descripción |
|---|---|---|
| `mode` | string | `platform_default`, `platform_managed_domain`, `customer_smtp`, `customer_api` o `customer_webhook`. |
| `sender_domain_id` | string o null | `platform_managed_domain`: el [dominio remitente](../email-sender-domains/get.md) (`sdom_…`) desde el que se envía el correo; null en los demás modos. Consulte el dominio para ver su estado actual. |
| `webhook_endpoint_id` | string o null | `customer_webhook`: el [endpoint de webhook](../webhook-endpoints/get.md) (`whe_…`) que recibe los mensajes renderizados; null en los demás modos. Consulte el endpoint para ver si sigue habilitado. |
| `from_address` | string o null | Dirección del remitente sin nombre; null en `platform_default`. |
| `reply_to` | string o null | Dirección de respuesta sin nombre. |
| `provider` | string o null | Proveedor de `customer_api`: `ses`, `sendgrid`, `postmark`, `mailgun` o `brevo`. |
| `smtp_host` | string o null | Nombre de host del servidor de `customer_smtp`. |
| `smtp_port` | integer o null | Puerto de `customer_smtp`: `465` (TLS implícito) o `587` (STARTTLS). |
| `smtp_username` | string o null | Nombre de usuario AUTH de `customer_smtp`. No es secreto. |
| `credentials_set` | boolean | Si hay una credencial almacenada. |
| `last_test_at` | string o null | Momento de la última [prueba de conexión](test.md); se borra cuando cambia la configuración. |
| `last_test_result` | string o null | `ok` o el código de error fijo de la última prueba. |
| `version` | integer | Versión de la configuración, igual que el `ETag`; `0` significa que nunca se configuró. |
| `updated_at` | string o null | Momento del último cambio. |

```json
{
  "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"
}
```

Una configuración `platform_managed_domain`:

```json
{
  "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"
}
```

Una configuración `customer_webhook`:

```json
{
  "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"
}
```

## Errores

| HTTP | código | Cuándo |
|---|---|---|
| 401 | `unauthenticated` | La credencial falta, no es válida o fue revocada. |
| 403 | `insufficient_permissions` | La credencial no tiene el permiso requerido. |
| 429 | `rate_limited` | Se superó el límite de frecuencia; reintente después del periodo indicado en `Retry-After`. |
| 503 | `service_unavailable` | Una dependencia no está disponible temporalmente; reintente después del periodo indicado en `Retry-After`. |

## Ejemplo

```bash
curl https://api.eu.keenauth.com/v1/email-provider \
  -H "Authorization: Bearer $KEENAUTH_SECRET_KEY"
```

CLI: `keenauth email-provider get`
