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 -
| Flag | Description |
|---|---|
--json | Output raw JSON |
--quick | Quick 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.
- clients/bash — Shell script
- clients/go — Go CLI + library
- clients/node — Node.js/TypeScript
- clients/python — Python