AlliedPass
Sign in
AlliedPassAPI Reference

Verify API

Assess the risk of a user registration or sign-in attempt by analyzing their email, IP address, phone number, and device fingerprint.

Overview#

The /verifyendpoint is the core of AlliedPass. Send it a user's registration or sign-in data and receive a risk score, risk level, and a detailed breakdown of each signal analyzed. You can then use the riskLevel to decide whether to allow, challenge, or block the request.

Base URL

https://api.alliedpass.com

Protocol

HTTPS only

Format

JSON

Authentication#

All requests must include your API key in the Authorization header. API keys are scoped to a project — create and manage them from the API Keys page.

http
Authorization: Bearer ap_live_<identifier>_<secret>

Never expose your API key in client-side code. Always call the Verify API from your server.

Rate Limits#

Rate limits are enforced per API key, per minute. When exceeded, the API returns 429 Too Many Requests. Rate limit headers (RateLimit-*) are included in every response.

PlanRequests / minute
Starter60
Pro300
Enterprise1,000

Endpoint & Request#

POST/verify

Request Headers

FieldTypeRequiredDescription
AuthorizationstringYesBearer ap_live_<your_key>
Content-TypestringYesMust be application/json

Request Body

FieldTypeRequiredDescription
emailstringYesThe user's email address (max 254 chars)
ipstringYesThe user's IP address (IPv4 or IPv6)
phonestringNoPhone number in E.164 format (e.g. +2348012345678)
userAgentstringNoRaw User-Agent header string from the user's browser (max 512 chars). Improves device fingerprinting — pass when possible.

Response#

200 OKFull result — all services returned successfully
207 Multi-StatusPartial result — one or more upstream services failed. Includes serviceErrors and "partial": true

Example Response

json
{
  "requestId": "a1b2c3d4-e5f6-7890-abcd-ef1234567890",
  "riskScore": 82,
  "riskLevel": "low",
  "isVpn": false,
  "isProxy": false,
  "isTor": false,
  "isDisposableEmail": false,
  "secureGateway": false,
  "email": {
    "address": "user@example.com",
    "domain": "example.com",
    "disposable": false,
    "freeProvider": false,
    "roleAddress": false,
    "tagged": false,
    "noReply": false
  },
  "phone": {
    "number": "+2348012345678",
    "valid": true,
    "voip": false,
    "lineType": "mobile",
    "carrier": "MTN Nigeria",
    "countryCode": "NG"
  },
  "flaggedReasons": [],
  "geo": {
    "country": "NG",
    "city": "Lagos",
    "isp": "MTN Nigeria"
  },
  "device": {
    "browser": "Chrome",
    "os": "Windows",
    "fingerprintId": "3f9a1c72b4e8d05a2f6c"
  }
}

Top-level Fields

FieldTypeDescription
requestIdstringUnique UUID for this verification request
riskScorenumberTrust score from 0 (high risk) to 100 (low risk)
riskLevelstring"low", "medium", or "high"
isVpnbooleanIP is a known VPN exit node
isProxybooleanIP is a known proxy
isTorbooleanIP is a Tor exit node
isDisposableEmailbooleanEmail domain is a disposable/temporary provider
isVoipbooleanPhone number is a VoIP line
secureGatewaybooleanEmail is behind a secure email gateway (e.g. Proofpoint, Mimecast)
secureGatewayProviderstringName of the gateway provider (only present when secureGateway is true)
flaggedReasonsstring[]List of risk flag codes
emailobjectDetailed email analysis
phoneobjectDetailed phone analysis (only present if phone was provided)
geoobjectGeolocation derived from IP
deviceobjectBrowser, OS, and fingerprint data
partialbooleantrue if one or more services failed (only present on 207)
serviceErrorsarrayDetails of failed services (only present on 207)

email object

FieldTypeDescription
addressstringNormalized input email
domainstringDomain portion of the email
disposablebooleanDomain is a disposable provider
freeProviderbooleanDomain is a free provider (e.g. Gmail, Yahoo)
roleAddressbooleanAddress is role-based (e.g. admin@, support@)
taggedbooleanEmail uses address tagging (e.g. user+tag@)
tagValuestringThe tag value if tagged is true
noReplybooleanAddress appears to be a no-reply address
irregularCharsbooleanAddress contains irregular characters
unicodeSymbolsbooleanAddress contains unicode/non-ASCII symbols

phone object (only present if phone was provided)

FieldTypeDescription
numberstringThe input phone number
validbooleanNumber is a valid, dialable number
voipbooleanNumber is a VoIP line
lineTypestring"mobile", "landline", "voip", etc.
carrierstringCarrier/network name
countryCodestringISO 3166-1 alpha-2 country code

geo object

FieldTypeDescription
countrystring | nullISO country code derived from IP
citystring | nullCity derived from IP
ispstring | nullInternet Service Provider

device object

FieldTypeDescription
browserstringDetected browser: "Chrome", "Firefox", "Safari", "Edge", or "unknown"
osstringDetected OS: "Windows", "macOS", "Android", "iOS", "Linux", or "unknown"
fingerprintIdstring24-char hex fingerprint derived from email + IP + user agent

Risk Score#

The riskScore is a value from 0 to 100, where higher means safer.

71 – 100

low risk

41 – 70

medium risk

0 – 40

high risk

Tor exit nodes and proxy IPs always force riskLevel to "high" regardless of score.

Flagged Reasons#

The flaggedReasons array contains zero or more of the following codes. An empty array means no risk signals were detected.

CodeMeaning
TOR_EXIT_NODE_DETECTEDIP is a Tor exit node
PROXY_IP_DETECTEDIP is a known proxy
VPN_IP_DETECTEDIP is a known VPN
DISPOSABLE_EMAIL_DETECTEDEmail domain is disposable
NO_REPLY_ADDRESS_DETECTEDEmail is a no-reply address
ROLE_BASED_ADDRESS_DETECTEDEmail is a role address (e.g. admin@)
FREE_PROVIDER_DETECTEDEmail uses a free provider
VOIP_NUMBER_DETECTEDPhone is a VoIP number
HIGH_RISK_SCOREOverall risk score is high

Errors#

All errors follow a consistent format:

json
{
  "error": {
    "code": "SNAKE_CASE_CODE",
    "message": "Human-readable description"
  }
}
StatusCodeDescription
400VALIDATION_ERRORMissing required fields or invalid values
401UNAUTHORIZEDMissing or invalid API key
429Rate limit exceeded
500INTERNAL_SERVER_ERRORUnexpected server error

Whitelisting#

Emails and domains can be whitelisted per-project from the AlliedPass dashboard. Whitelisted entries bypass the disposable email signal — a known internal or partner email will not be flagged even if its domain appears on a disposable list. Manage your whitelist from the Logs page.

Code Examples#

A full end-to-end verification call. Replace ap_live_your_key_here with an API key from the API Keys page.

Node.js
const response = await fetch("https://api.alliedpass.com/verify", {
  method: "POST",
  headers: {
    "Authorization": "Bearer ap_live_your_key_here",
    "Content-Type": "application/json",
  },
  body: JSON.stringify({
    email: "user@example.com",
    ip: "203.0.113.42",
    phone: "+2348012345678",
    userAgent: navigator.userAgent,
  }),
});

const result = await response.json();

if (result.riskLevel === "high") {
  // Block or challenge the user
}
💡

Check riskLevel first for a quick allow/block decision. Use flaggedReasons and the detailed sub-objects for fine-grained logic (e.g. only allow VPN users if they verified a non-VoIP phone).