Thanks to visit codestin.com
Credit goes to billionverify.com

BillionVerify LogoBillionVerify

Node.js SDK

Node.js email checker SDK. Install, configure, verify emails with JavaScript. Code examples included.

The official BillionVerify SDK for Node.js provides a simple and efficient way to integrate email verification into your Node.js applications.

Installation

npm install billionverify-sdk
# or
yarn add billionverify-sdk
# or
pnpm add billionverify-sdk

Quick Start

import { BillionVerify } from 'billionverify-sdk';

const client = new BillionVerify({
  apiKey: process.env.BV_API_KEY,
});

// Verify a single email
const result = await client.verify('[email protected]');
console.log(result.status); // 'valid', 'invalid', 'unknown', 'risky', 'disposable', 'catchall', or 'role'

Configuration

Client Options

const client = new BillionVerify({
  apiKey: 'your-api-key',

  // Optional configurations
  timeout: 30000,           // Request timeout in ms (default: 30000)
  retries: 3,               // Number of retry attempts (default: 3)
  baseUrl: 'https://api.billionverify.com', // Custom API URL
});

Environment Variables

We recommend storing your API key in environment variables:

# .env
BV_API_KEY=your_api_key_here
import { BillionVerify } from 'billionverify-sdk';

const client = new BillionVerify({
  apiKey: process.env.BV_API_KEY,
});

Single Email Verification

Basic Verification

const result = await client.verify('[email protected]');

console.log({
  email: result.email,
  status: result.status,
  score: result.score,
  deliverable: result.result.deliverable,
  disposable: result.result.disposable,
  role: result.result.role,
});

Verification with Options

const result = await client.verify('[email protected]', {
  smtpCheck: true,      // Enable SMTP verification
  timeout: 5000,        // Custom timeout for this request
});

Response Structure

interface VerificationResult {
  email: string;
  status: 'valid' | 'invalid' | 'unknown' | 'risky' | 'disposable' | 'catchall' | 'role';
  result: {
    deliverable: boolean | null;
    valid_format: boolean;
    valid_domain: boolean;
    valid_mx: boolean;
    disposable: boolean;
    role: boolean;
    catchall: boolean;
    free: boolean;
    smtp_valid: boolean | null;
  };
  score: number;
  reason: string | null;
}

Bulk Verification

Submit a Bulk Job

const emails = [
  '[email protected]',
  '[email protected]',
  '[email protected]',
];

const job = await client.verifyBulk(emails);
console.log(`Job ID: ${job.id}`);
console.log(`Status: ${job.status}`);

Check Job Status

const status = await client.getBulkJobStatus(job.id);

console.log({
  id: status.id,
  status: status.status,      // 'pending', 'processing', 'completed', 'failed'
  total: status.total,
  processed: status.processed,
  valid: status.valid,
  invalid: status.invalid,
});

Get Results

// Wait for job completion
const results = await client.getBulkJobResults(job.id);

for (const result of results) {
  console.log(`${result.email}: ${result.status}`);
}

Webhook Notifications

Instead of polling, configure a webhook to receive notifications when the job completes:

const job = await client.verifyBulk(emails, {
  webhookUrl: 'https://your-domain.com/webhooks/billionverify',
});

Credit Management

Check Available Credits

const credits = await client.getCredits();

console.log({
  available: credits.available,
  used: credits.used,
  total: credits.total,
});

Error Handling

Error Types

import {
  BillionVerify,
  BillionVerifyError,
  AuthenticationError,
  RateLimitError,
  ValidationError,
} from 'billionverify-sdk';

try {
  const result = await client.verify('invalid-email');
} catch (error) {
  if (error instanceof AuthenticationError) {
    console.error('Invalid API key');
  } else if (error instanceof RateLimitError) {
    console.error(`Rate limited. Retry after ${error.retryAfter} seconds`);
  } else if (error instanceof ValidationError) {
    console.error(`Invalid input: ${error.message}`);
  } else if (error instanceof BillionVerifyError) {
    console.error(`API error: ${error.message}`);
  }
}

Retry Logic

The SDK automatically retries failed requests with exponential backoff:

const client = new BillionVerify({
  apiKey: process.env.BV_API_KEY,
  retries: 5,                    // Max retry attempts
  retryDelay: 1000,              // Initial delay in ms
  retryMaxDelay: 30000,          // Max delay between retries
});

Framework Integration

Express.js

import express from 'express';
import { BillionVerify } from 'billionverify-sdk';

const app = express();
const client = new BillionVerify({
  apiKey: process.env.BV_API_KEY,
});

app.post('/api/verify-email', async (req, res) => {
  const { email } = req.body;

  try {
    const result = await client.verify(email);

    if (result.status === 'invalid') {
      return res.status(400).json({
        valid: false,
        message: 'Please enter a valid email address',
      });
    }

    if (result.result.disposable) {
      return res.status(400).json({
        valid: false,
        message: 'Disposable emails are not allowed',
      });
    }

    res.json({ valid: true, result });
  } catch (error) {
    res.status(500).json({ error: 'Verification failed' });
  }
});

Fastify

import Fastify from 'fastify';
import { BillionVerify } from 'billionverify-sdk';

const fastify = Fastify();
const client = new BillionVerify({
  apiKey: process.env.BV_API_KEY,
});

fastify.post('/verify', async (request, reply) => {
  const { email } = request.body;
  const result = await client.verify(email);
  return result;
});

Next.js API Route

// pages/api/verify.js
import { BillionVerify } from 'billionverify-sdk';

const client = new BillionVerify({
  apiKey: process.env.BV_API_KEY,
});

export default async function handler(req, res) {
  if (req.method !== 'POST') {
    return res.status(405).json({ error: 'Method not allowed' });
  }

  const { email } = req.body;

  try {
    const result = await client.verify(email);
    res.status(200).json(result);
  } catch (error) {
    res.status(500).json({ error: 'Verification failed' });
  }
}

Complete Example

User Registration with Email Verification

import { BillionVerify } from 'billionverify-sdk';

const client = new BillionVerify({
  apiKey: process.env.BV_API_KEY,
});

async function validateRegistrationEmail(email) {
  const result = await client.verify(email);

  // Reject invalid emails
  if (result.status === 'invalid') {
    return {
      valid: false,
      reason: 'invalid_email',
      message: 'This email address is invalid',
    };
  }

  // Reject disposable emails
  if (result.result.disposable) {
    return {
      valid: false,
      reason: 'disposable',
      message: 'Please use a permanent email address',
    };
  }

  // Warn about role-based emails
  if (result.result.role) {
    return {
      valid: true,
      warning: 'role_based',
      message: 'Using a personal email is recommended',
    };
  }

  // Accept valid emails
  return {
    valid: true,
    score: result.score,
  };
}

// Usage
const validation = await validateRegistrationEmail('[email protected]');
if (!validation.valid) {
  console.error(validation.message);
}

TypeScript Support

The SDK includes TypeScript definitions out of the box:

import {
  BillionVerify,
  VerificationResult,
  BulkJob,
  ClientOptions
} from 'billionverify-sdk';

const options: ClientOptions = {
  apiKey: process.env.BV_API_KEY!,
  timeout: 30000,
};

const client = new BillionVerify(options);

const result: VerificationResult = await client.verify('[email protected]');

Next Steps

On this page