Skip to Content

Visitors API

Retrieve identified website visitors with their profile data and ICP scores.

Required Headers

HeaderDescription
x-access-keyYour Warm AI API key

Identification Types

Warm AI supports two identification types depending on the visitor’s region.

Individual (US)

Personal identification via IP lookup with LinkedIn profile data. Returns the visitor’s name, job title, company, and LinkedIn URL.

Company (EU)

GDPR-compliant identification at the company level. Returns company name, industry, employee count, and location without exposing personal data.


IP to Company (Smart Waterfall)

POST https://api.warmai.uk/functions/v1/ip-to-company

Identify the company behind a visitor IP address. Uses a smart hybrid waterfall that checks free local databases first (6.7M+ IP records, 2.4M VPN IPs, 434K hosting ranges), then fans out to paid providers only when needed.

Cost: 5 credits per business match. VPN, hosting, and ISP results are not charged.

Request Body

FieldTypeRequiredDescription
ipstringYesIPv4 or IPv6 address

Response Fields

FieldTypeDescription
ipstringThe IP address queried
identifiedbooleanWhether a business was identified
domainstringCompany domain (if identified)
company_namestringCompany name (if available)
confidencenumberConfidence score (0–1)
confidence_levelstringconfirmed, likely, or unconfirmed
traffic_typestringbusiness, isp, hosting, vpn, education, government, or unknown
reasonstringWhy the result was classified this way
matchesarrayAll candidate matches ranked by confidence
matches[].domainstringCandidate domain
matches[].confidencenumberCandidate confidence score
vpn_providerstringVPN provider name (if detected)
country_codestringISO country code
cachedbooleanWhether this was a cached result (7-day TTL)

Example Request

curl -X POST "https://api.warmai.uk/functions/v1/ip-to-company" \ -H "Content-Type: application/json" \ -H "x-access-key: warm_YOUR_API_KEY" \ -d '{"ip": "203.0.113.1"}'

Example Response (Business Match)

{ "ip": "203.0.113.1", "identified": true, "domain": "example.com", "company_name": "Example Corp", "confidence": 0.85, "confidence_level": "confirmed", "traffic_type": "business", "reason": "Multiple providers agreed", "matches": [ { "domain": "example.com", "confidence": 0.85 } ], "vpn_provider": null, "country_code": "US", "cached": false }

Example Response (VPN Detected — Not Charged)

{ "ip": "198.51.100.42", "identified": false, "domain": null, "company_name": null, "confidence": 0, "confidence_level": "unconfirmed", "traffic_type": "vpn", "reason": "VPN detected (NordVPN)", "matches": [], "vpn_provider": "NordVPN", "country_code": "NL", "cached": false }

IP to Best Fit (Aggregate Lookup)

POST https://api.warmai.uk/functions/v1/ip-to-best-fit

Full company identification plus individual and decision maker enrichment. Runs the Smart Waterfall first — VPN, hosting, and ISP traffic is filtered at zero cost. Only unresolved IPs are sent for deeper enrichment.

Cost: 8 credits per lookup (VPN/hosting/ISP results are not charged).

Request Body

FieldTypeRequiredDescription
ip_addressstringYesIPv4 or IPv6 address
websitestringNoYour domain for contextual matching
descriptionstringNoBusiness description for better targeting

Response Fields

FieldTypeDescription
successbooleanWhether the request completed
ip_addressstringThe IP address queried
identifiedbooleanWhether a business was identified
companystringCompany name (if identified)
domainstringCompany domain (if identified)
traffic_typestringbusiness, isp, hosting, vpn, or unknown
reasonstringWhy the result was classified this way
confidencenumberConfidence score (0–1)
confidence_levelstringconfirmed, likely, or unconfirmed
matchesarrayCandidate matches (business results only)

Example Request

curl -X POST "https://api.warmai.uk/functions/v1/ip-to-best-fit" \ -H "Content-Type: application/json" \ -H "x-access-key: warm_YOUR_API_KEY" \ -d '{ "ip_address": "203.0.113.1", "website": "yoursite.com", "description": "We sell B2B SaaS for marketing teams" }'

Example Response (ISP — Not Charged)

{ "success": true, "ip_address": "81.246.16.178", "identified": false, "company": "Proximus", "domain": null, "traffic_type": "isp", "reason": "Residential/mobile ISP — cannot identify employer", "confidence": 1, "confidence_level": "confirmed" }

List Identifications

GET https://api.warmai.uk/identification-list

Retrieve identified visitors for a given website.

Query Parameters

ParameterTypeRequiredDescription
website_idstringYesThe website ID to retrieve visitors for
statusstringNoFilter by status: pending, identified, failed
typestringNoFilter by identification type: individual, company
qualifiedbooleanNoFilter by ICP qualification: true or false
limitintegerNoNumber of results to return (default 100, max 500)
offsetintegerNoNumber of results to skip for pagination

Response Fields

FieldTypeDescription
identificationsarrayList of identification objects
identifications[].idstringUnique identification ID
identifications[].identification_typestringindividual or company
identifications[].statusstringpending, identified, or failed
identifications[].identified_atstringISO 8601 timestamp
identifications[].individualobjectPresent for individual type identifications
identifications[].individual.linkedin_urlstringLinkedIn profile URL
identifications[].individual.linkedin_namestringFull name from LinkedIn
identifications[].individual.linkedin_titlestringJob title
identifications[].individual.linkedin_companystringCompany name
identifications[].companyobjectPresent for company type identifications
identifications[].company.namestringCompany name
identifications[].company.domainstringCompany website domain
identifications[].company.industrystringIndustry sector
identifications[].company.employee_countstringEmployee count range
identifications[].company.locationstringCompany headquarters location
identifications[].company.linkedin_urlstringCompany LinkedIn page URL
identifications[].icp_scoresarrayICP scoring results
identifications[].icp_scores[].icp_idstringThe ICP ID
identifications[].icp_scores[].icp_namestringThe ICP name
identifications[].icp_scores[].scorenumberMatch score (0-100)
identifications[].icp_scores[].qualifiedbooleanWhether the visitor meets the ICP threshold
identifications[].icp_scores[].ai_summarystringAI-generated summary of the match
identifications[].sessionobjectVisitor session data
identifications[].session.pages_visitedintegerNumber of pages viewed
identifications[].session.duration_secondsintegerSession duration in seconds
identifications[].session.referrerstringReferring URL

Example Request

curl -X GET "https://api.warmai.uk/identification-list?website_id=ws_a1b2c3d4&status=identified&limit=10" \ -H "x-access-key: YOUR_API_KEY"

Example Response

{ "identifications": [ { "id": "ident_001", "identification_type": "individual", "status": "identified", "identified_at": "2026-03-19T14:22:00Z", "individual": { "linkedin_url": "https://linkedin.com/in/janedoe", "linkedin_name": "Jane Doe", "linkedin_title": "VP of Marketing", "linkedin_company": "Acme Corp" }, "company": null, "icp_scores": [ { "icp_id": "icp_abc123", "icp_name": "Marketing Leaders", "score": 87, "qualified": true, "ai_summary": "Strong match - VP-level marketing role at a mid-market SaaS company with 200+ employees." } ], "session": { "pages_visited": 5, "duration_seconds": 240, "referrer": "https://google.com" } }, { "id": "ident_002", "identification_type": "company", "status": "identified", "identified_at": "2026-03-19T13:10:00Z", "individual": null, "company": { "name": "TechStart GmbH", "domain": "techstart.de", "industry": "Software Development", "employee_count": "51-200", "location": "Berlin, Germany", "linkedin_url": "https://linkedin.com/company/techstart-gmbh" }, "icp_scores": [ { "icp_id": "icp_abc123", "icp_name": "Marketing Leaders", "score": 62, "qualified": false, "ai_summary": "Partial match - correct industry but company size is below the target range." } ], "session": { "pages_visited": 3, "duration_seconds": 120, "referrer": "https://linkedin.com" } } ] }
Last updated on