POST /v1/verify · 3 credits
At least one of email, phone, or ip must be provided. The more signals you include, the more accurate the fraud score.
Request
{
"email": "jhon.doe@gmial.com",
"phone": "+905321234567",
"ip": "84.17.45.10"
}
| Field | Type | Required | Description |
|---|---|---|---|
email |
string | — | Email to include in scoring |
phone |
string | — | Phone to include in scoring |
ip |
string | — | IP to include in scoring |
Note
At least one field is required.
Response
{
"fraud_score": 65,
"risk": "medium",
"email": {
"input": "jhon.doe@gmial.com",
"valid_syntax": true,
"score": 61,
"deliverability": "risky",
"credits_used": 1
},
"phone": {
"input": "+905321234567",
"valid": true,
"country": "TR",
"line_type": "mobile",
"credits_used": 1
},
"ip": {
"input": "84.17.45.10",
"vpn": true,
"abuse_score": 72,
"credits_used": 1
},
"credits_used": 3
}
| Field | Type | Description |
|---|---|---|
fraud_score |
integer | 0–100 combined fraud risk (higher = more risk) |
risk |
enum | low medium high |
email |
EmailResult | Full email result (if email provided) |
phone |
PhoneResult | Full phone result (if phone provided) |
ip |
IpResult | Full IP result (if IP provided) |
credits_used |
integer | Always 3 |
Example
curl -X POST https://api.checkharbor.com/v1/verify \
-H "X-Api-Key: chk_live_..." \
-H "Content-Type: application/json" \
-d '{
"email": "jhon.doe@gmial.com",
"ip": "84.17.45.10"
}'
```
const result = await checkharbor.verify({
email: "jhon.doe@gmial.com",
ip: "84.17.45.10",
});if (result.risk === "high") {
// block or require additional verification
}
```
result = client.verify(email="jhon.doe@gmial.com", ip="84.17.45.10")if result["risk"] == "high":
# block or require additional verification
pass
```