curl --request POST \
--url https://api.nuvia.ai/v1/contacts/identity-check \
--header 'Authorization: Bearer <token>' \
--header 'Content-Type: application/json' \
--data '
{
"email": "<string>",
"linkedin_identifier": "<string>",
"phone_number": "<string>",
"country_code": "<string>",
"exclude_contact_id": "<string>"
}
'import requests
url = "https://api.nuvia.ai/v1/contacts/identity-check"
payload = {
"email": "<string>",
"linkedin_identifier": "<string>",
"phone_number": "<string>",
"country_code": "<string>",
"exclude_contact_id": "<string>"
}
headers = {
"Authorization": "Bearer <token>",
"Content-Type": "application/json"
}
response = requests.post(url, json=payload, headers=headers)
print(response.text)const options = {
method: 'POST',
headers: {Authorization: 'Bearer <token>', 'Content-Type': 'application/json'},
body: JSON.stringify({
email: '<string>',
linkedin_identifier: '<string>',
phone_number: '<string>',
country_code: '<string>',
exclude_contact_id: '<string>'
})
};
fetch('https://api.nuvia.ai/v1/contacts/identity-check', options)
.then(res => res.json())
.then(res => console.log(res))
.catch(err => console.error(err));<?php
$curl = curl_init();
curl_setopt_array($curl, [
CURLOPT_URL => "https://api.nuvia.ai/v1/contacts/identity-check",
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => "",
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 30,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => "POST",
CURLOPT_POSTFIELDS => json_encode([
'email' => '<string>',
'linkedin_identifier' => '<string>',
'phone_number' => '<string>',
'country_code' => '<string>',
'exclude_contact_id' => '<string>'
]),
CURLOPT_HTTPHEADER => [
"Authorization: Bearer <token>",
"Content-Type: application/json"
],
]);
$response = curl_exec($curl);
$err = curl_error($curl);
curl_close($curl);
if ($err) {
echo "cURL Error #:" . $err;
} else {
echo $response;
}package main
import (
"fmt"
"strings"
"net/http"
"io"
)
func main() {
url := "https://api.nuvia.ai/v1/contacts/identity-check"
payload := strings.NewReader("{\n \"email\": \"<string>\",\n \"linkedin_identifier\": \"<string>\",\n \"phone_number\": \"<string>\",\n \"country_code\": \"<string>\",\n \"exclude_contact_id\": \"<string>\"\n}")
req, _ := http.NewRequest("POST", url, payload)
req.Header.Add("Authorization", "Bearer <token>")
req.Header.Add("Content-Type", "application/json")
res, _ := http.DefaultClient.Do(req)
defer res.Body.Close()
body, _ := io.ReadAll(res.Body)
fmt.Println(string(body))
}HttpResponse<String> response = Unirest.post("https://api.nuvia.ai/v1/contacts/identity-check")
.header("Authorization", "Bearer <token>")
.header("Content-Type", "application/json")
.body("{\n \"email\": \"<string>\",\n \"linkedin_identifier\": \"<string>\",\n \"phone_number\": \"<string>\",\n \"country_code\": \"<string>\",\n \"exclude_contact_id\": \"<string>\"\n}")
.asString();require 'uri'
require 'net/http'
url = URI("https://api.nuvia.ai/v1/contacts/identity-check")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Post.new(url)
request["Authorization"] = 'Bearer <token>'
request["Content-Type"] = 'application/json'
request.body = "{\n \"email\": \"<string>\",\n \"linkedin_identifier\": \"<string>\",\n \"phone_number\": \"<string>\",\n \"country_code\": \"<string>\",\n \"exclude_contact_id\": \"<string>\"\n}"
response = http.request(request)
puts response.read_body{
"status": "new",
"matched_by": "email",
"matches_count": 123,
"contact": {
"_id": "<string>",
"name": "<string>",
"email": "<string>",
"phone_number": "<string>",
"country_code": "<string>",
"linkedin_identifier": "<string>"
},
"conflicts": [
{
"field": "email",
"contact": {
"_id": "<string>",
"name": "<string>",
"email": "<string>",
"phone_number": "<string>",
"country_code": "<string>",
"linkedin_identifier": "<string>"
}
}
]
}Check contact identifiers
Read-only. Tells you what POST /v1/contacts would do with these identifiers, so the form can warn before saving.
- Lookup order: email, LinkedIn and phone.
new: no contact in the company has the identifiers.existing: the contact incontactwould be reused;matches_countsays how many contacts matched by thematched_bykey.conflict: different identifiers point to different contacts;conflictsreturns each one.exclude_contact_id: ignores this contact (the edit form sends the contact itself).
curl --request POST \
--url https://api.nuvia.ai/v1/contacts/identity-check \
--header 'Authorization: Bearer <token>' \
--header 'Content-Type: application/json' \
--data '
{
"email": "<string>",
"linkedin_identifier": "<string>",
"phone_number": "<string>",
"country_code": "<string>",
"exclude_contact_id": "<string>"
}
'import requests
url = "https://api.nuvia.ai/v1/contacts/identity-check"
payload = {
"email": "<string>",
"linkedin_identifier": "<string>",
"phone_number": "<string>",
"country_code": "<string>",
"exclude_contact_id": "<string>"
}
headers = {
"Authorization": "Bearer <token>",
"Content-Type": "application/json"
}
response = requests.post(url, json=payload, headers=headers)
print(response.text)const options = {
method: 'POST',
headers: {Authorization: 'Bearer <token>', 'Content-Type': 'application/json'},
body: JSON.stringify({
email: '<string>',
linkedin_identifier: '<string>',
phone_number: '<string>',
country_code: '<string>',
exclude_contact_id: '<string>'
})
};
fetch('https://api.nuvia.ai/v1/contacts/identity-check', options)
.then(res => res.json())
.then(res => console.log(res))
.catch(err => console.error(err));<?php
$curl = curl_init();
curl_setopt_array($curl, [
CURLOPT_URL => "https://api.nuvia.ai/v1/contacts/identity-check",
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => "",
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 30,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => "POST",
CURLOPT_POSTFIELDS => json_encode([
'email' => '<string>',
'linkedin_identifier' => '<string>',
'phone_number' => '<string>',
'country_code' => '<string>',
'exclude_contact_id' => '<string>'
]),
CURLOPT_HTTPHEADER => [
"Authorization: Bearer <token>",
"Content-Type: application/json"
],
]);
$response = curl_exec($curl);
$err = curl_error($curl);
curl_close($curl);
if ($err) {
echo "cURL Error #:" . $err;
} else {
echo $response;
}package main
import (
"fmt"
"strings"
"net/http"
"io"
)
func main() {
url := "https://api.nuvia.ai/v1/contacts/identity-check"
payload := strings.NewReader("{\n \"email\": \"<string>\",\n \"linkedin_identifier\": \"<string>\",\n \"phone_number\": \"<string>\",\n \"country_code\": \"<string>\",\n \"exclude_contact_id\": \"<string>\"\n}")
req, _ := http.NewRequest("POST", url, payload)
req.Header.Add("Authorization", "Bearer <token>")
req.Header.Add("Content-Type", "application/json")
res, _ := http.DefaultClient.Do(req)
defer res.Body.Close()
body, _ := io.ReadAll(res.Body)
fmt.Println(string(body))
}HttpResponse<String> response = Unirest.post("https://api.nuvia.ai/v1/contacts/identity-check")
.header("Authorization", "Bearer <token>")
.header("Content-Type", "application/json")
.body("{\n \"email\": \"<string>\",\n \"linkedin_identifier\": \"<string>\",\n \"phone_number\": \"<string>\",\n \"country_code\": \"<string>\",\n \"exclude_contact_id\": \"<string>\"\n}")
.asString();require 'uri'
require 'net/http'
url = URI("https://api.nuvia.ai/v1/contacts/identity-check")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Post.new(url)
request["Authorization"] = 'Bearer <token>'
request["Content-Type"] = 'application/json'
request.body = "{\n \"email\": \"<string>\",\n \"linkedin_identifier\": \"<string>\",\n \"phone_number\": \"<string>\",\n \"country_code\": \"<string>\",\n \"exclude_contact_id\": \"<string>\"\n}"
response = http.request(request)
puts response.read_body{
"status": "new",
"matched_by": "email",
"matches_count": 123,
"contact": {
"_id": "<string>",
"name": "<string>",
"email": "<string>",
"phone_number": "<string>",
"country_code": "<string>",
"linkedin_identifier": "<string>"
},
"conflicts": [
{
"field": "email",
"contact": {
"_id": "<string>",
"name": "<string>",
"email": "<string>",
"phone_number": "<string>",
"country_code": "<string>",
"linkedin_identifier": "<string>"
}
}
]
}Authorizations
JWT authentication token
Headers
Target company identifier. Required only for global API keys (type=global). Ignored for company API keys and human users.
Body
Email to check. Only counts as an identifier if it contains "@".
LinkedIn profile URL or just the profile name.
Phone (area code + number, without the country code). A phone that doesn't form a valid number is ignored in the check.
Phone country calling code. Example: 55.
Contact to ignore in the check. The edit form sends the contact itself: a value equal to its own isn't a conflict.
^[0-9a-fA-F]{24}$Response
Check result
new: no contact has the identifiers. existing: the POST would reuse contact. conflict: different identifiers point to different contacts.
new, existing, conflict Identifier that matched
email, linkedin, phone How many contacts in the company matched by the matched_by key.
Contact that would be reused. null for new and conflict.
Show child attributes
Show child attributes
For conflict, the contact for each identifier. Empty in the other cases.
Show child attributes
Show child attributes