Get Contact
curl --request GET \
--url https://api.example.com/v1/contacts/:idimport requests
url = "https://api.example.com/v1/contacts/:id"
response = requests.get(url)
print(response.text)const options = {method: 'GET'};
fetch('https://api.example.com/v1/contacts/:id', 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.example.com/v1/contacts/:id",
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => "",
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 30,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => "GET",
]);
$response = curl_exec($curl);
$err = curl_error($curl);
curl_close($curl);
if ($err) {
echo "cURL Error #:" . $err;
} else {
echo $response;
}package main
import (
"fmt"
"net/http"
"io"
)
func main() {
url := "https://api.example.com/v1/contacts/:id"
req, _ := http.NewRequest("GET", url, nil)
res, _ := http.DefaultClient.Do(req)
defer res.Body.Close()
body, _ := io.ReadAll(res.Body)
fmt.Println(string(body))
}HttpResponse<String> response = Unirest.get("https://api.example.com/v1/contacts/:id")
.asString();require 'uri'
require 'net/http'
url = URI("https://api.example.com/v1/contacts/:id")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Get.new(url)
response = http.request(request)
puts response.read_body{
"data": {
"id": "<string>",
"first_name": "<string>",
"last_name": "<string>",
"full_name": "<string>",
"email": "<string>",
"phone": "<string>",
"job_title": "<string>",
"company": "<string>",
"related_company_id": "<string>",
"linkedin_url": "<string>",
"priority": 123,
"tags": [
{}
],
"custom_fields": {},
"created_date": "<string>",
"updated_date": "<string>",
"recent_notes": [
{}
],
"open_tasks": [
{}
],
"open_deals": [
{}
]
}
}Contacts
Get Contact
Retrieve a single contact by ID
GET
/
v1
/
contacts
/
:id
Get Contact
curl --request GET \
--url https://api.example.com/v1/contacts/:idimport requests
url = "https://api.example.com/v1/contacts/:id"
response = requests.get(url)
print(response.text)const options = {method: 'GET'};
fetch('https://api.example.com/v1/contacts/:id', 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.example.com/v1/contacts/:id",
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => "",
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 30,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => "GET",
]);
$response = curl_exec($curl);
$err = curl_error($curl);
curl_close($curl);
if ($err) {
echo "cURL Error #:" . $err;
} else {
echo $response;
}package main
import (
"fmt"
"net/http"
"io"
)
func main() {
url := "https://api.example.com/v1/contacts/:id"
req, _ := http.NewRequest("GET", url, nil)
res, _ := http.DefaultClient.Do(req)
defer res.Body.Close()
body, _ := io.ReadAll(res.Body)
fmt.Println(string(body))
}HttpResponse<String> response = Unirest.get("https://api.example.com/v1/contacts/:id")
.asString();require 'uri'
require 'net/http'
url = URI("https://api.example.com/v1/contacts/:id")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Get.new(url)
response = http.request(request)
puts response.read_body{
"data": {
"id": "<string>",
"first_name": "<string>",
"last_name": "<string>",
"full_name": "<string>",
"email": "<string>",
"phone": "<string>",
"job_title": "<string>",
"company": "<string>",
"related_company_id": "<string>",
"linkedin_url": "<string>",
"priority": 123,
"tags": [
{}
],
"custom_fields": {},
"created_date": "<string>",
"updated_date": "<string>",
"recent_notes": [
{}
],
"open_tasks": [
{}
],
"open_deals": [
{}
]
}
}Request
Path Parameters
string
required
Contact UUID
Query Parameters
string
Optional comma-separated list of related resources to embed in the response.
Accepts any of
notes, tasks, deals, or * for all. When omitted, only the
contact row is returned. One round-trip, no N+1.include=notes→ top 3 most recent notes inrecent_notes[]include=tasks→ top 3 open tasks inopen_tasks[]include=deals→ top 3 most recently-updated deals where this contact is the primary inopen_deals[]include=*→ all three
Headers
Authorization: Bearer wbk_your_api_key_here
Response
Self-healing names:
first_name / last_name / full_name are always populated in the response, even for legacy rows where the DB has only full_name. The server derives the missing pieces on read via the same rules documented on Data Integrity.object
The contact object (plus optional embedded resources when
include= is set).Show Contact properties
Show Contact properties
string
Unique contact ID (UUID)
string
First name (derived from
full_name / email if DB is missing it)string
Last name
string
Full name
string
Email address
string
Phone number
string
Job title or position
string
Company name (string field on contact)
string
UUID of linked Company record
string
LinkedIn profile URL
number
Priority (1=high, 2=medium, 3=low)
array
Tag strings
object
Arbitrary JSON preserved from the original source (CSV column names, etc.)
string
ISO 8601 timestamp
string
ISO 8601 timestamp of last update
array
(Only when
?include=notes or *) Up to 3 most recent notes for this contact: {id, title, content, note_type, category, created_date}array
(Only when
?include=tasks or *) Up to 3 open tasks: {id, title, status, priority, due_date, assigned_to_user_id}array
(Only when
?include=deals or *) Up to 3 deals with this contact as primary: {id, name, stage, estimated_value, updated_date}# Basic — contact only
curl https://data.leadlex.com/functions/v1/api-gateway/v1/contacts/123e4567-e89b-12d3-a456-426614174000 \
-H "Authorization: Bearer wbk_your_api_key_here"
# One-call agent context — contact + recent notes + open tasks + open deals
curl "https://data.leadlex.com/functions/v1/api-gateway/v1/contacts/123e4567-e89b-12d3-a456-426614174000?include=notes,tasks,deals" \
-H "Authorization: Bearer wbk_your_api_key_here"
import requests
API_KEY = "wbk_your_api_key_here"
BASE_URL = "https://data.leadlex.com/functions/v1/api-gateway"
CONTACT_ID = "123e4567-e89b-12d3-a456-426614174000"
headers = {"Authorization": f"Bearer {API_KEY}"}
response = requests.get(f"{BASE_URL}/v1/contacts/{CONTACT_ID}", headers=headers)
contact = response.json()["data"]
const CONTACT_ID = '123e4567-e89b-12d3-a456-426614174000';
const response = await fetch(
`https://data.leadlex.com/functions/v1/api-gateway/v1/contacts/${CONTACT_ID}`,
{
headers: { 'Authorization': 'Bearer wbk_your_api_key_here' }
}
);
const { data } = await response.json();
console.log(data);
Example Response (with ?include=notes,tasks,deals)
{
"data": {
"id": "123e4567-e89b-12d3-a456-426614174000",
"first_name": "Jane",
"last_name": "Doe",
"full_name": "Jane Doe",
"email": "jane@example.com",
"phone": "+1234567890",
"job_title": "General Counsel",
"company": "Acme Legal",
"related_company_id": "abc…",
"priority": 1,
"tags": ["VIP", "Q2-target"],
"created_date": "2026-01-15T10:00:00Z",
"updated_date": "2026-02-24T14:30:00Z",
"recent_notes": [
{ "id": "n1", "title": "Intro call", "note_type": "call", "created_date": "2026-02-20T14:00:00Z" }
],
"open_tasks": [
{ "id": "t1", "title": "Send proposal", "status": "pending", "priority": "high", "due_date": "2026-03-01" }
],
"open_deals": [
{ "id": "d1", "name": "Acme Legal — Q2 retainer", "stage": "proposal", "estimated_value": 85000 }
]
}
}
Errors
| Status | Code | Description |
|---|---|---|
| 401 | invalid_key | Invalid API key |
| 403 | insufficient_permissions | Missing read permission |
| 404 | not_found | Contact not found or not in your workspace |
| 429 | rate_limited | Rate limit exceeded |
Example 404 Response
{
"error": {
"code": "not_found",
"message": "Contact not found"
}
}
You can only access contacts within your own workspace. Attempting to retrieve a contact from another workspace will return a 404 error.