CLI & Libraries

Official clients for vrfy.lol. All handle proof-of-work transparently — just call the function and results come back.

🔒 Privacy: Email addresses are sent via POST to vrfy.lol — never in URLs, never logged, never stored. No accounts, no tracking. Proof-of-work replaces API keys. You can always self-host if you need privacy. Source is on GitHub.

Quick start (curl)

No install required:

curl -s -X POST https://vrfy.lol/ \
  -H "Content-Type: application/json" \
  -d '{"email":"user@example.com"}' | jq .action

Shell script

Zero dependencies beyond curl + openssl. Handles PoW, batch files, colored output, and pipe-friendly exit codes.

# Run directly
curl -sL vrfy.lol/vrfy.sh | bash -s -- user@example.com

# Or download and use
curl -sLO vrfy.lol/vrfy.sh && chmod +x vrfy.sh
./vrfy.sh user@example.com
./vrfy.sh user@example.com admin@company.com
./vrfy.sh --batch emails.txt
echo "user@example.com" | ./vrfy.sh -
./vrfy.sh --json user@example.com

Exit codes: 0 = allow, 1 = block, 2 = verify.

Go CLI

Built with Cobra + Lipgloss. Rich terminal output with color.

# Homebrew
brew install yokedotlol/tap/vrfy

# Usage
vrfy check user@example.com
vrfy check --json user@example.com
vrfy check --batch emails.txt
vrfy check --quick user@example.com
echo "user@example.com" | vrfy check -
FlagDescription
--jsonOutput raw JSON
--quickQuick mode (Tier 1 signals only)
--batch <file>Read emails from file, one per line
--url <base>Override API base URL

Go library

import vrfy "github.com/yokedotlol/vrfy"

client := vrfy.NewClient()
result, err := client.Validate("user@example.com")
fmt.Println(result.Action) // "allow", "verify", "block"

// Batch
batch, err := client.ValidateBatch([]string{
  "alice@gmail.com", "bob@company.com",
})

Node.js / TypeScript

import { validate, validateBatch } from '@yokedotlol/vrfy';

const result = await validate('user@example.com');
console.log(result.action); // 'allow' | 'verify' | 'block'

if (result.validation.has_typo) {
  console.log('Did you mean:', result.validation.typo_suggestion);
}

// Batch (up to 20)
const batch = await validateBatch([
  'alice@gmail.com', 'bob@company.com'
]);

Python

from vrfy import validate, validate_batch

result = validate("user@example.com")
print(result["action"])  # "allow", "verify", or "block"

# Batch
batch = validate_batch(["alice@gmail.com", "bob@company.com"])
for r in batch["results"]:
    print(f"{r['email']} → {r['action']}")

All clients support

  • Transparent PoW — rate limits are handled automatically
  • Single and batch validation
  • Typed responses with full signal access
  • Zero configuration — no API keys, no signup

Source

All clients live in github.com/yokedotlol/vrfy-lol/clients.