Contacts
Namespaced Contacts for CRM integrations
Live API testing
Paste a tq_live_… key from Settings → API Keys. Requests are sent through this docs server to /api/v1/… (no browser CORS). The key is kept in sessionStorage only.
Base URL: https://api.taliiq.com — set $TALIIQ_API_KEY to a key from Settings → API Keys in the dashboard.
List contacts
/api/v1/contacts/contacts.list · scope: contacts:readLists organization contacts. Pass namespace and external_id to resolve one namespaced identity.
curl -X GET 'https://api.taliiq.com/api/v1/contacts/?q=&namespace=&external_id=&limit=50' \
-H 'Authorization: Bearer $TALIIQ_API_KEY'import requests
url = "https://api.taliiq.com/api/v1/contacts/?q=&namespace=&external_id=&limit=50"
headers = {
"Authorization": "Bearer $TALIIQ_API_KEY"
}
response = requests.get(url, headers=headers)
print(response.status_code)
print(response.json())const response = await fetch("https://api.taliiq.com/api/v1/contacts/?q=&namespace=&external_id=&limit=50", {
method: "GET",
headers: {
"Authorization": "Bearer $TALIIQ_API_KEY"
},
});
console.log(await response.json());Try it live
/api/proxy/v1/contacts/?q=&namespace=&external_id=&limit=50Get contact
/api/v1/contacts/{contact_id}/contacts.get · scope: contacts:readcurl -X GET 'https://api.taliiq.com/api/v1/contacts/{contact_id}/' \
-H 'Authorization: Bearer $TALIIQ_API_KEY'import requests
url = "https://api.taliiq.com/api/v1/contacts/{contact_id}/"
headers = {
"Authorization": "Bearer $TALIIQ_API_KEY"
}
response = requests.get(url, headers=headers)
print(response.status_code)
print(response.json())const response = await fetch("https://api.taliiq.com/api/v1/contacts/{contact_id}/", {
method: "GET",
headers: {
"Authorization": "Bearer $TALIIQ_API_KEY"
},
});
console.log(await response.json());Try it live
/api/proxy/v1/contacts/{id}/Resolve contact
/api/v1/contacts/resolve/contacts.resolve · scope: contacts:readResolve by Taliiq contact UUID or namespaced external identity.
curl -X GET 'https://api.taliiq.com/api/v1/contacts/resolve/?contact_id=&namespace=crm&external_id=customer-42' \
-H 'Authorization: Bearer $TALIIQ_API_KEY'import requests
url = "https://api.taliiq.com/api/v1/contacts/resolve/?contact_id=&namespace=crm&external_id=customer-42"
headers = {
"Authorization": "Bearer $TALIIQ_API_KEY"
}
response = requests.get(url, headers=headers)
print(response.status_code)
print(response.json())const response = await fetch("https://api.taliiq.com/api/v1/contacts/resolve/?contact_id=&namespace=crm&external_id=customer-42", {
method: "GET",
headers: {
"Authorization": "Bearer $TALIIQ_API_KEY"
},
});
console.log(await response.json());Try it live
/api/proxy/v1/contacts/resolve/?contact_id=&namespace=crm&external_id=customer-42Upsert contact
/api/v1/contacts/contacts.upsert · scope: contacts:writeCreates or updates a Contact and its namespaced external identity. The same request can be safely retried with Idempotency-Key.
curl -X POST 'https://api.taliiq.com/api/v1/contacts/' \
-H 'Authorization: Bearer $TALIIQ_API_KEY' \
-H 'Idempotency-Key: unique-key-per-contact-write' \
-H 'Content-Type: application/json' \
-d '{"namespace":"crm","external_id":"customer-42","phone_e164":"+201234567890","first_name":"Sara"}'import requests
url = "https://api.taliiq.com/api/v1/contacts/"
headers = {
"Authorization": "Bearer $TALIIQ_API_KEY",
"Idempotency-Key": "unique-key-per-contact-write",
"Content-Type": "application/json"
}
payload = {
"namespace": "crm",
"external_id": "customer-42",
"phone_e164": "+201234567890",
"first_name": "Sara"
}
response = requests.post(url, headers=headers, json=payload)
print(response.status_code)
print(response.json())const response = await fetch("https://api.taliiq.com/api/v1/contacts/", {
method: "POST",
headers: {
"Authorization": "Bearer $TALIIQ_API_KEY",
"Idempotency-Key": "unique-key-per-contact-write",
"Content-Type": "application/json"
},
body: JSON.stringify({"namespace":"crm","external_id":"customer-42","phone_e164":"+201234567890","first_name":"Sara"}),
});
console.log(await response.json());Try it live
/api/proxy/v1/contacts/The legacy external_id field remains in responses during deprecation. New CRM integrations should use external_identities with an explicit namespace.
Delete contact
/api/v1/contacts/{contact_id}/contacts.delete · scope: contacts:writePermanently deletes a Contact and its sources/external identities. Returns 403 forbidden when Zero Data Retention blocks writes.
curl -X DELETE 'https://api.taliiq.com/api/v1/contacts/{contact_id}/' \
-H 'Authorization: Bearer $TALIIQ_API_KEY'import requests
url = "https://api.taliiq.com/api/v1/contacts/{contact_id}/"
headers = {
"Authorization": "Bearer $TALIIQ_API_KEY"
}
response = requests.delete(url, headers=headers)
print(response.status_code)
print(response.json())const response = await fetch("https://api.taliiq.com/api/v1/contacts/{contact_id}/", {
method: "DELETE",
headers: {
"Authorization": "Bearer $TALIIQ_API_KEY"
},
});
console.log(await response.json());Try it live
/api/proxy/v1/contacts/{id}/
