curl --request GET \
--url https://{subdomain}.conveyour.com/api/contacts/{id} \
--header 'x-conveyour-token: <api-key>'const options = {method: 'GET', headers: {'x-conveyour-token': '<api-key>'}};
fetch('https://{subdomain}.conveyour.com/api/contacts/{id}', options)
.then(res => res.json())
.then(res => console.log(res))
.catch(err => console.error(err));const options = {method: 'GET', headers: {'x-conveyour-token': '<api-key>'}};
fetch('https://{subdomain}.conveyour.com/api/contacts/{id}', options)
.then(res => res.json())
.then(res => console.log(res))
.catch(err => console.error(err));import requests
url = "https://{subdomain}.conveyour.com/api/contacts/{id}"
headers = {"x-conveyour-token": "<api-key>"}
response = requests.get(url, headers=headers)
print(response.text)<?php
$curl = curl_init();
curl_setopt_array($curl, [
CURLOPT_URL => "https://{subdomain}.conveyour.com/api/contacts/{id}",
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => "",
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 30,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => "GET",
CURLOPT_HTTPHEADER => [
"x-conveyour-token: <api-key>"
],
]);
$response = curl_exec($curl);
$err = curl_error($curl);
curl_close($curl);
if ($err) {
echo "cURL Error #:" . $err;
} else {
echo $response;
}{
"status": "ok",
"message": "success",
"data": {
"1165": {
"title": "Profile",
"type": "profile",
"order": 0,
"fields": {
"first_name": {
"id": 6553,
"label": "name",
"type": "string",
"name": "first_name",
"editable": true,
"visible": "guest",
"value": "Jane"
}
}
},
"con_id": "6a1445f03af9bb089d10e1ad",
"con_pid": "Ab3Kd9Xz1Q",
"name": "Jane Doe",
"first_name": "Jane",
"last_name": "Doe",
"urls": [],
"photo": "",
"deletable": true,
"archived": false,
"archived_at": false
}
}Get a contact
Returns a single contact.
Two different shapes, depending on the ID you pass:
- Public portal ID (a 10-character string) → a lightweight lookup returning only
{ "con_id": "..." }, with message"Contact ID Found". - Internal contact ID → the full contact profile, with message
"success".
The full profile is not a flat contact object. It is keyed by bucket ID (e.g. "1165"), each bucket holding a fields map where every field carries its metadata (label, type, visible, editable, …) as well as its value. Alongside the buckets it returns con_id, con_pid, name, first_name, last_name, urls, photo, deletable, archived and archived_at.
If you only need field values, prefer List contacts with filters and fields — its result objects are flat.
Requires the contacts permission on the service account that owns your API key. A key whose service account lacks it fails with "Lacking necessary permission contacts".
Permission: requires contacts.
A missing contact does not return 404. An unknown ID comes back as 200 with status: "failed" and the message Cannot find contact.
curl --request GET \
--url https://{subdomain}.conveyour.com/api/contacts/{id} \
--header 'x-conveyour-token: <api-key>'const options = {method: 'GET', headers: {'x-conveyour-token': '<api-key>'}};
fetch('https://{subdomain}.conveyour.com/api/contacts/{id}', options)
.then(res => res.json())
.then(res => console.log(res))
.catch(err => console.error(err));const options = {method: 'GET', headers: {'x-conveyour-token': '<api-key>'}};
fetch('https://{subdomain}.conveyour.com/api/contacts/{id}', options)
.then(res => res.json())
.then(res => console.log(res))
.catch(err => console.error(err));import requests
url = "https://{subdomain}.conveyour.com/api/contacts/{id}"
headers = {"x-conveyour-token": "<api-key>"}
response = requests.get(url, headers=headers)
print(response.text)<?php
$curl = curl_init();
curl_setopt_array($curl, [
CURLOPT_URL => "https://{subdomain}.conveyour.com/api/contacts/{id}",
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => "",
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 30,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => "GET",
CURLOPT_HTTPHEADER => [
"x-conveyour-token: <api-key>"
],
]);
$response = curl_exec($curl);
$err = curl_error($curl);
curl_close($curl);
if ($err) {
echo "cURL Error #:" . $err;
} else {
echo $response;
}{
"status": "ok",
"message": "success",
"data": {
"1165": {
"title": "Profile",
"type": "profile",
"order": 0,
"fields": {
"first_name": {
"id": 6553,
"label": "name",
"type": "string",
"name": "first_name",
"editable": true,
"visible": "guest",
"value": "Jane"
}
}
},
"con_id": "6a1445f03af9bb089d10e1ad",
"con_pid": "Ab3Kd9Xz1Q",
"name": "Jane Doe",
"first_name": "Jane",
"last_name": "Doe",
"urls": [],
"photo": "",
"deletable": true,
"archived": false,
"archived_at": false
}
}Authorizations
Your API key token. Contacts endpoints require a Server-only — Full API key — see Authentication.
Path Parameters
The contact's internal ID.
Query Parameters
Team scope for the request, as one or more team ObjectIds. The brackets are required: PHP keeps only the last value for a repeated plain key, so teams=A&teams=B silently resolves to B alone. On requests with a JSON body you may send teams (no brackets) in the body instead.
Values that are not valid ObjectIds are silently ignored — a mistyped team ID behaves as if no team was sent. See the teams section of the API conventions guide.
Response
The contact record.
The common response envelope shared by all ConveYour endpoints.
ok on success, failed on error.
ok, failed Human-readable description of the result.
The nested, bucket-keyed contact when the path segment is an ObjectId. When it is a 10-character pid, only {con_id} is returned.
- Option 1
- Option 2
Show child attributes
Show child attributes