
# 이메일 제공자 조회

`GET /v1/email-provider` · 권한 `email-provider:read` · 모든 요금제

환경이 이메일을 발송하는 방식을 반환합니다. 여기에는 발송 모드, 발신자 주소, 직접 구성한 SMTP 서버 또는 이메일 제공자, 마지막 연결 테스트 결과가 포함됩니다.

자격 증명(SMTP 비밀번호 또는 API 키)은 마스킹되거나 길이 정보를 포함한 형태로도 반환되지 않습니다. `credentials_set`은 자격 증명이 저장되어 있는지 여부만 나타냅니다.

한 번도 구성되지 않은 환경은 버전 `0`과 함께 `platform_default`를 반환합니다. `ETag` 헤더에는 버전이 포함되며, 구성을 [교체](put.md)할 때 `If-Match`로 전송하십시오.

## 응답

`200 OK`와 함께 구성 정보를 반환하며, `ETag`에는 해당 버전이 설정됩니다.

| 필드 | 유형 | 설명 |
|---|---|---|
| `mode` | string | `platform_default`, `platform_managed_domain`, `customer_smtp`, `customer_api` 또는 `customer_webhook`. |
| `sender_domain_id` | string 또는 null | `platform_managed_domain`: 메일 발송에 사용되는 [발신 도메인](../email-sender-domains/get.md)(`sdom_…`). 다른 모든 모드에서는 null입니다. 현재 상태는 도메인을 조회하여 확인하십시오. |
| `webhook_endpoint_id` | string 또는 null | `customer_webhook`: 렌더링된 메시지를 받는 [웹훅 엔드포인트](../webhook-endpoints/get.md)(`whe_…`). 다른 모든 모드에서는 null입니다. 엔드포인트가 여전히 활성화되어 있는지는 엔드포인트를 조회하여 확인하십시오. |
| `from_address` | string 또는 null | 발신자 주소(표시 이름 제외). `platform_default`에서는 null입니다. |
| `reply_to` | string 또는 null | 회신 주소(표시 이름 제외). |
| `provider` | string 또는 null | `customer_api` 제공자: `ses`, `sendgrid`, `postmark`, `mailgun` 또는 `brevo`. |
| `smtp_host` | string 또는 null | `customer_smtp` 서버 호스트 이름. |
| `smtp_port` | integer 또는 null | `customer_smtp` 포트: `465`(암시적 TLS) 또는 `587`(STARTTLS). |
| `smtp_username` | string 또는 null | `customer_smtp` AUTH 사용자 이름. 비밀 정보가 아닙니다. |
| `credentials_set` | boolean | 자격 증명이 저장되어 있는지 여부. |
| `last_test_at` | string 또는 null | 마지막 [연결 테스트](test.md)의 시간. 구성이 변경되면 초기화됩니다. |
| `last_test_result` | string 또는 null | 마지막 테스트의 `ok` 또는 고정된 오류 코드. |
| `version` | integer | 구성 버전이며 `ETag`와 같습니다. `0`은 한 번도 구성되지 않았음을 뜻합니다. |
| `updated_at` | string 또는 null | 마지막 변경 시간. |

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

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

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

## 오류

| HTTP | code | 발생 조건 |
|---|---|---|
| 401 | `unauthenticated` | 자격 증명이 없거나 유효하지 않거나 취소되었습니다. |
| 403 | `insufficient_permissions` | 자격 증명에 필요한 권한이 없습니다. |
| 429 | `rate_limited` | 속도 제한을 초과했습니다. `Retry-After` 기간 이후에 다시 시도하십시오. |
| 503 | `service_unavailable` | 종속 서비스를 일시적으로 사용할 수 없습니다. `Retry-After` 기간 이후에 다시 시도하십시오. |

## 예시

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

CLI: `keenauth email-provider get`
