EmailVerify LogoEmailVerify

API Reference

Complete email checker API reference. Endpoints, parameters, response codes for email verification and validation.

EmailVerify API는 강력한 이메일 인증 기능을 제공하는 RESTful 서비스입니다. 모든 API 요청은 HTTPS를 통해 이루어져야 합니다.

기본 URL

https://api.emailverify.ai/v1

인증

모든 API 요청은 Authorization 헤더에 Bearer 토큰을 사용한 인증이 필요합니다:

Authorization: Bearer YOUR_API_KEY

EmailVerify 대시보드에서 API 키를 발급받으세요.

예제

curl -X POST https://api.emailverify.ai/v1/verify \
  -H "Authorization: Bearer bv_live_xxx" \
  -H "Content-Type: application/json" \
  -d '{"email": "test@example.com"}'

요청 제한

플랜시간당 요청일일 요청
Free1001,000
Starter1,00010,000
Professional10,000100,000
Enterprise맞춤맞춤

요청 제한 정보는 응답 헤더에 포함됩니다:

헤더설명
X-RateLimit-Limit허용된 최대 요청 수
X-RateLimit-Remaining윈도우 내 남은 요청 수
X-RateLimit-Reset제한이 재설정되는 Unix 타임스탬프

요청 제한을 초과하면 429 Too Many Requests 응답을 받게 됩니다:

{
  "error": {
    "code": "RATE_LIMIT_EXCEEDED",
    "message": "Rate limit exceeded. Please try again later.",
    "retry_after": 3600
  }
}

엔드포인트

단일 이메일 인증

상세 결과와 함께 단일 이메일 주소를 인증합니다.

POST /verify

요청

{
  "email": "user@example.com",
  "smtp_check": true,
  "timeout": 5000
}

파라미터

파라미터타입필수기본값설명
emailstring-인증할 이메일 주소
smtp_checkboolean아니오trueSMTP 메일박스 인증 수행
timeoutinteger아니오5000요청 타임아웃(밀리초, 최대: 30000)

응답

{
  "email": "user@example.com",
  "status": "valid",
  "result": {
    "deliverable": true,
    "valid_format": true,
    "valid_domain": true,
    "valid_mx": true,
    "disposable": false,
    "role": false,
    "catchall": false,
    "free": false,
    "smtp_valid": true
  },
  "score": 0.95,
  "reason": null,
  "credits_used": 1
}

응답 필드

필드타입설명
emailstring인증된 이메일 주소
statusstring인증 상태: valid, invalid, unknown, accept_all
resultobject상세 인증 결과
scorenumber신뢰도 점수 (0.0 - 1.0)
reasonstringinvalid/unknown 상태의 이유 (nullable)
credits_usedinteger소비된 크레딧 수

Result 객체 필드

필드타입설명
deliverableboolean이메일이 메시지를 받을 수 있는지 여부
valid_formatboolean이메일이 유효한 구문인지 여부
valid_domainboolean도메인이 존재하는지 여부
valid_mxboolean도메인에 MX 레코드가 있는지 여부
disposableboolean일회용 서비스의 이메일인지 여부
roleboolean역할 기반 이메일인지 여부 (info@, support@)
catchallboolean도메인이 모든 이메일을 수락하는지 여부
freeboolean무료 제공업체의 이메일인지 여부
smtp_validbooleanSMTP 인증 통과 여부

대량 이메일 인증

여러 이메일 주소를 인증에 제출합니다. 진행 상황 추적을 위한 작업 ID를 반환합니다.

POST /verify/bulk

요청

{
  "emails": [
    "user1@example.com",
    "user2@example.com",
    "user3@example.com"
  ],
  "smtp_check": true,
  "webhook_url": "https://your-app.com/webhooks/emailverify"
}

파라미터

파라미터타입필수기본값설명
emailsarray-이메일 주소 배열 (최대: 10,000)
smtp_checkboolean아니오trueSMTP 인증 수행
webhook_urlstring아니오-완료 알림을 받을 URL

응답

{
  "job_id": "job_abc123xyz",
  "status": "processing",
  "total": 3,
  "processed": 0,
  "valid": 0,
  "invalid": 0,
  "unknown": 0,
  "credits_used": 3,
  "created_at": "2025-01-15T10:30:00Z"
}

대량 작업 상태 확인

대량 인증 작업의 상태를 확인합니다.

GET /verify/bulk/{job_id}

응답 (진행 중)

{
  "job_id": "job_abc123xyz",
  "status": "processing",
  "total": 1000,
  "processed": 450,
  "valid": 380,
  "invalid": 50,
  "unknown": 20,
  "progress_percent": 45,
  "created_at": "2025-01-15T10:30:00Z"
}

응답 (완료)

{
  "job_id": "job_abc123xyz",
  "status": "completed",
  "total": 1000,
  "processed": 1000,
  "valid": 850,
  "invalid": 100,
  "unknown": 50,
  "progress_percent": 100,
  "created_at": "2025-01-15T10:30:00Z",
  "completed_at": "2025-01-15T10:35:00Z"
}

작업 상태 값

상태설명
pending작업이 대기열에 있음
processing작업이 처리 중임
completed작업이 성공적으로 완료됨
failed작업이 실패함 (error 필드 참조)

대량 작업 결과 가져오기

완료된 대량 작업의 인증 결과를 가져옵니다.

GET /verify/bulk/{job_id}/results

쿼리 파라미터

파라미터타입기본값설명
limitinteger100페이지당 결과 수 (최대: 1000)
offsetinteger0시작 위치
statusstring-상태별 필터: valid, invalid, unknown

응답

{
  "job_id": "job_abc123xyz",
  "total": 1000,
  "limit": 100,
  "offset": 0,
  "results": [
    {
      "email": "user1@example.com",
      "status": "valid",
      "result": {
        "deliverable": true,
        "disposable": false,
        "role": false
      },
      "score": 0.95
    },
    {
      "email": "user2@example.com",
      "status": "invalid",
      "result": {
        "deliverable": false,
        "reason": "mailbox_not_found"
      },
      "score": 0.10
    }
  ]
}

크레딧 확인

현재 크레딧 잔액 및 사용 정보를 가져옵니다.

GET /credits

응답

{
  "available": 9500,
  "used": 500,
  "total": 10000,
  "plan": "Professional",
  "resets_at": "2025-02-01T00:00:00Z",
  "rate_limit": {
    "requests_per_hour": 10000,
    "remaining": 9850
  }
}

웹훅

웹훅 생성

POST /webhooks
{
  "url": "https://your-app.com/webhooks/emailverify",
  "events": ["verification.completed", "bulk.completed"],
  "secret": "your-webhook-secret"
}

웹훅 목록

GET /webhooks

웹훅 삭제

DELETE /webhooks/{webhook_id}

웹훅 이벤트

이벤트설명
verification.completed단일 이메일 인증 완료
bulk.completed대량 작업 완료
bulk.failed대량 작업 실패
credits.low크레딧이 임계값 미만

웹훅 페이로드

{
  "event": "bulk.completed",
  "timestamp": "2025-01-15T10:35:00Z",
  "data": {
    "job_id": "job_abc123xyz",
    "status": "completed",
    "total": 1000,
    "valid": 850,
    "invalid": 100,
    "unknown": 50
  },
  "signature": "sha256=..."
}

인증 상태

상태의미권장 조치
valid이메일이 존재하며 메시지를 받을 수 있음발송 안전
invalid이메일이 존재하지 않거나 받을 수 없음목록에서 제거
unknown유효성을 확인할 수 없음나중에 재시도하거나 주의해서 사용
accept_all도메인이 모든 이메일을 수락 (캐치올)반송 여부 모니터링

오류 응답

모든 오류는 일관된 형식을 따릅니다:

{
  "error": {
    "code": "ERROR_CODE",
    "message": "Human-readable error message",
    "details": "Additional context (optional)"
  }
}

HTTP 상태 코드

코드설명
200성공
400잘못된 요청 - 유효하지 않은 파라미터
401인증 실패 - 유효하지 않거나 누락된 API 키
403금지됨 - 권한 부족
404찾을 수 없음 - 리소스가 존재하지 않음
429너무 많은 요청 - 요청 제한 초과
500내부 서버 오류
503서비스 사용 불가

오류 코드

코드HTTP 상태설명
INVALID_API_KEY401API 키가 유효하지 않거나 누락됨
RATE_LIMIT_EXCEEDED429너무 많은 요청
INSUFFICIENT_CREDITS403크레딧 부족
INVALID_EMAIL400이메일 형식이 유효하지 않음
INVALID_REQUEST400요청 본문 형식이 잘못됨
JOB_NOT_FOUND404대량 작업 ID를 찾을 수 없음
TIMEOUT504인증 시간 초과

모범 사례

1. 환경 변수 사용

API 키를 하드코딩하지 마세요:

// Good
const apiKey = process.env.EMAILVERIFY_API_KEY;

// Bad - don't do this
const apiKey = 'bv_live_xxx';

2. 요청 제한 처리

지수 백오프를 구현하세요:

async function verifyWithRetry(email, maxRetries = 3) {
  for (let i = 0; i < maxRetries; i++) {
    try {
      return await verify(email);
    } catch (error) {
      if (error.code === 'RATE_LIMIT_EXCEEDED') {
        await sleep(Math.pow(2, i) * 1000);
        continue;
      }
      throw error;
    }
  }
}

3. 여러 이메일에는 대량 처리 사용

10개 이상의 이메일을 인증할 때는 대량 엔드포인트를 사용하세요:

// Good - single API call
const job = await client.verifyBulk(emails);

// Bad - many individual calls
for (const email of emails) {
  await client.verify(email);
}

4. 대량 작업에 웹훅 구현

계속 폴링하지 말고 웹훅을 사용하세요:

// Submit with webhook
const job = await client.verifyBulk(emails, {
  webhookUrl: 'https://your-app.com/webhook',
});

SDK

더 쉬운 통합을 위해 공식 SDK를 사용하세요:

다음 단계

On this page