Quickstart
1. Create a key
Section titled “1. Create a key”Sign up at app.validationcheck.net, open API keys, and create a key. You’ll see it once, so copy it somewhere safe.
vc_test_…keys are free and return test answers. Start here.vc_live_…keys run real checks and use credits. They’re available once your email address is verified.
2. Check an email address
Section titled “2. Check an email address”curl https://api.validationcheck.net/v1/email \ -H "Authorization: Bearer $VC_KEY" \ -H "Content-Type: application/json" \ -d '{"email": "valid@test.validationcheck.net"}'// Node 18+, Deno, Bun, Workersconst res = await fetch("https://api.validationcheck.net/v1/email", { method: "POST", headers: { Authorization: `Bearer ${process.env.VC_KEY}`, "Content-Type": "application/json" }, body: JSON.stringify({ email: "jane@example.com" }),});const { data } = await res.json();if (data.recommendation.action === "block") rejectSignup();import os, requests
res = requests.post( "https://api.validationcheck.net/v1/email", headers={"Authorization": f"Bearer {os.environ['VC_KEY']}"}, json={"email": "jane@example.com"}, timeout=15,)data = res.json()["data"]print(data["verdict"]["status"], data["risk"]["score"])<?php$ch = curl_init("https://api.validationcheck.net/v1/email");curl_setopt_array($ch, [ CURLOPT_POST => true, CURLOPT_RETURNTRANSFER => true, CURLOPT_HTTPHEADER => ["Authorization: Bearer " . getenv("VC_KEY"), "Content-Type: application/json"], CURLOPT_POSTFIELDS => json_encode(["email" => "jane@example.com"]),]);$data = json_decode(curl_exec($ch), true)["data"];echo $data["recommendation"]["action"];body := strings.NewReader(`{"email": "jane@example.com"}`)req, _ := http.NewRequest("POST", "https://api.validationcheck.net/v1/email", body)req.Header.Set("Authorization", "Bearer "+os.Getenv("VC_KEY"))req.Header.Set("Content-Type", "application/json")res, err := http.DefaultClient.Do(req)if err != nil { log.Fatal(err)}defer res.Body.Close()var out struct { Data struct { Recommendation struct{ Action string } `json:"recommendation"` } `json:"data"`}json.NewDecoder(res.Body).Decode(&out)fmt.Println(out.Data.Recommendation.Action)require "net/http"require "json"
uri = URI("https://api.validationcheck.net/v1/email")res = Net::HTTP.post(uri, { email: "jane@example.com" }.to_json, "Authorization" => "Bearer #{ENV["VC_KEY"]}", "Content-Type" => "application/json")puts JSON.parse(res.body)["data"]["recommendation"]["action"]Any language, any HTTP client
Section titled “Any language, any HTTP client”ValidationCheck is a plain REST API: HTTPS, JSON in and out, and your key in the Authorization: Bearer … header. The examples above are all the same request, so anything that can send an HTTP request works, including no-code tools (see Integrations).
| Base URL | https://api.validationcheck.net |
| Lookups | POST /v1/email, /v1/phone, /v1/phone/type, /v1/ip, /v1/domain/age, /v1/domain/email-auth, /v1/check with a JSON body |
| Account | GET /v1/account |
| Auth | Authorization: Bearer vc_live_… (or vc_test_…) |
| Errors | Non-2xx status with {"success": false, "error": {"code": …}} (codes) |
The full machine-readable spec is at /openapi.json (OpenAPI 3.1). Import it into Postman, Insomnia, or Bruno for a ready-made collection, or feed it to a code generator for a typed client. Every endpoint is also in the API reference.
3. Act on the answer
Section titled “3. Act on the answer”Branch on data.recommendation.action:
| Action | Meaning |
|---|---|
approve |
Accept it. |
verify |
Probably fine; confirm with a code or a verification email. |
review |
Accept with care, or add friction. |
block |
Don’t accept it. |
data.verdict says what we found and data.risk says how risky it is; see Responses.