개발자

제대로 작동하는 이메일 검증 API

주소 하나를 실시간으로 검증하거나 리스트 전체를 배치로 보내세요. 모든 요청은 HTTPS를 사용하며 JSON을 반환합니다. API 키는 대시보드의 API 키 메뉴에서 만드세요.

  • REST 및 JSON
  • 배치 콜백
  • 대시보드와 같은 크레딧 사용
활성 키와 새 키를 만드는 양식이 있는 BounceBell API 키 페이지

인증

모든 요청에서 API 키를 Authorization 헤더의 Bearer 토큰으로 보내세요. 키는 서버에 보관하고, 브라우저 코드나 모바일 앱에는 절대 넣지 마세요.

Authorization: Bearer YOUR_API_KEY

모든 엔드포인트의 기본 URL은 https://bouncebell.com/api/v1입니다.

주소 하나 검증

GET https://bouncebell.com/api/v1/verify

매개변수필수설명
email예검증할 주소. URL 인코딩하세요.
timeout아니요메일 서버를 기다리는 시간(초), 3~30. 기본값 10. 시간이 초과되면 상태는 unknown이 되며 크레딧은 사용되지 않습니다.

예시

curl "https://bouncebell.com/api/v1/verify?email=rini.elizabeth%40acme-foods.example" \
  -H "Authorization: Bearer YOUR_API_KEY"
{
  "email": "rini.elizabeth@acme-foods.example",
  "status": "valid",
  "reason": "mailbox_exists",
  "domain": "acme-foods.example",
  "mx_record": "mx1.acme-foods.example",
  "disposable": false,
  "role": false,
  "free_provider": false,
  "catch_all": false,
  "did_you_mean": null,
  "checked_at": "2026-10-30T09:30:12Z",
  "credits_used": 1
}

결과 필드

필드유형설명
emailstring보낸 그대로의 주소.
statusstring판정 결과. 상태를 참고하세요.
reasonstring판정 사유. 예: mailbox_not_found 또는 no_mail_server.
domainstring도메인 부분(소문자).
mx_recordstring or null우선순위가 가장 높은 메일 서버.
disposableboolean도메인이 임시 메일함 서비스이면 true.
rolebooleaninfo@ 또는 support@ 같은 공유 메일함이면 true.
free_providerbooleanGmail 같은 무료 메일 제공업체이면 true.
catch_allboolean도메인이 모든 주소를 수신하면 true.
did_you_meanstring or null도메인에 오타가 있어 보일 때 제안하는 수정된 주소.
checked_atstring검증 실행 시각, ISO 8601 UTC 형식.
credits_usedinteger1, 상태가 unknown이면 0.

상태

상태의미권장 조치
valid메일함이 존재하며 메일을 수신합니다.보내기
invalid주소, 도메인 또는 메일함이 존재하지 않습니다.삭제
disposable임시 메일함 서비스입니다.삭제
catch_all도메인이 모든 주소를 수신하므로 메일함을 확인할 수 없습니다.검토
role존재하는 공유 메일함입니다.검토
unknown메일 서버가 제시간에 응답하지 않았습니다. 요금 없음.나중에 재시도

배치

요청 한 번에 최대 100,000개의 주소를 보낼 수 있습니다. 배치는 백그라운드에서 실행됩니다. 상태를 폴링하거나 callback_url을 지정하면 배치가 완료될 때 해당 URL을 호출합니다.

배치 생성

POST https://bouncebell.com/api/v1/batches

curl -X POST "https://bouncebell.com/api/v1/batches" \
  -H "Authorization: Bearer YOUR_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{"name": "October import", "emails": ["a@example.com", "b@example.com"],
       "callback_url": "https://yourapp.example/hooks/bouncebell"}'
{ "id": "bat_8f2k1q3m9x7w4p", "status": "queued", "total": 2, "done": 0 }

배치를 생성할 때 고유 주소마다 크레딧이 예약되고, 완료 시 알 수 없음 결과에 대한 크레딧은 환불됩니다. 콜백은 {"event": "batch.completed", "batch_id": "...", "status": "done", "counts": {...}}가 담긴 POST를 받습니다. 콜백 URL은 HTTPS를 사용해야 합니다.

진행 상황 확인

GET https://bouncebell.com/api/v1/batches/{id}

{ "id": "bat_8f2k1q3m9x7w4p", "status": "running", "total": 2, "done": 1 }

상태는 queued, running, done 중 하나입니다. done이면 응답에 상태별 counts도 포함됩니다.

결과 다운로드

GET https://bouncebell.com/api/v1/batches/{id}/results

기본적으로 JSON을 반환합니다. CSV 파일이 필요하면 ?format=csv를 추가하세요. 각 행에는 단건 검증과 같은 필드가 포함됩니다.

크레딧

GET https://bouncebell.com/api/v1/credits

{ "credits_remaining": 33420 }

오류 및 제한

오류가 발생하면 error 코드와 읽기 쉬운 message가 담긴 JSON 본문이 반환됩니다.

HTTP 코드오류조치 방법
400bad_request매개변수가 없거나 잘못되었습니다. 메시지를 확인하세요.
401invalid_key키가 올바른지, 폐기되지 않았는지 확인하세요.
402no_credits크레딧을 추가로 구매하세요.
403email_not_confirmed가입 시 이메일로 보내 드린 인증 링크를 여세요.
404not_found배치가 존재하지 않거나 30일 후 삭제되었습니다.
429rate_limited속도를 줄이세요. Retry-After 헤더에 표시된 초만큼 기다리세요.
500server_error잠시 후 다시 시도하세요. 계속 발생하면 지원팀에 문의하세요.

단건 검증은 키당 초당 20건으로 제한됩니다. 더 필요하면 문의하세요.