Quickstart: your first check in 2 minutes
Get an API key, make one request, and read the verdict. Copy-paste examples for curl, Python and JavaScript.
Veqen tells you whether a signup is real. You send an email address, an IP address, a phone number or a domain. You get back a verdict (admit, review or refuse), a score from 0 to 100, and the reasons in plain English.
1. Get an API key
- Create a free account and confirm your email. That unlocks 1,000 free credits every month.
- Open API keys and click Create key.
- Copy the key. It starts with
vq_live_and is shown only once.
Store it as an environment variable so it never ends up in your code:
export VEQEN_API_KEY="vq_live_..."
2. Check an email address
curl https://veqen-app.com/v1/email/check \
-H "Authorization: Bearer $VEQEN_API_KEY" \
-H "Content-Type: application/json" \
-d '{"email": "jane@mailinator.com"}'
import os, requests
response = requests.post(
"https://veqen-app.com/v1/email/check",
headers={"Authorization": f"Bearer {os.environ['VEQEN_API_KEY']}"},
json={"email": "jane@mailinator.com"},
timeout=10,
)
result = response.json()
print(result["risk"]["verdict"]) # "refuse"
const response = await fetch("https://veqen-app.com/v1/email/check", {
method: "POST",
headers: {
Authorization: `Bearer ${process.env.VEQEN_API_KEY}`,
"Content-Type": "application/json",
},
body: JSON.stringify({ email: "jane@mailinator.com" }),
});
const result = await response.json();
console.log(result.risk.verdict); // "refuse"
3. Read the answer
The part you act on is always risk:
{
"email": "jane@mailinator.com",
"disposable": true,
"did_you_mean": null,
"risk": {
"score": 90,
"level": "high",
"verdict": "refuse",
"reasons": [
{
"code": "disposable_domain",
"impact": 90,
"message": "mailinator.com hands out throwaway inboxes."
}
]
}
}
| Field | What it means |
|---|---|
risk.verdict |
What we suggest you do: admit, review or refuse. |
risk.score |
0 means nothing wrong, 100 means certainly fake or unusable. |
risk.reasons |
Every problem we found, strongest first. Each has a stable code and a human message. |
4. Act on the verdict
| Verdict | Score | What to do |
|---|---|---|
admit |
under 30 | Let them in. |
review |
30 to 69 | Let them in with friction: confirm the email, verify the phone, or hold free credits until they do. |
refuse |
70 and up | Block, and ask for a different email or phone with a friendly message. |
Tip: show people the
message, not thecode. "Please use a permanent email address" works better than "Invalid email".
What next?
- Checking a whole signup at once? Use the signup check. It combines email, IP and phone and catches mismatches between them.
- Building an AI agent? Connect the MCP server.
- Want to know what every reason means? See risk scores and reasons.