Create a CRM Person
Create a new person record in the Zeeg CRM API with first or last name, link them to an existing company by UUID, and attach social profile URLs
curl --request POST \
--url https://api.zeeg.me/v2/crm/people \
--header 'Authorization: Bearer <token>' \
--header 'Content-Type: application/json' \
--data '
{
"firstName": "Jane",
"lastName": "Doe",
"salutation": "Ms",
"emails": [
"jane.doe@acme.com"
],
"jobTitle": "Head of Product",
"description": "<string>",
"phoneNumber": "+4930123456789",
"primaryLocation": "Berlin, Germany",
"avatarUrl": "<string>",
"companyId": "<string>",
"socials": {
"linkedin": "<string>",
"twitter": "<string>",
"facebook": "<string>",
"instagram": "<string>"
}
}
'import requests
url = "https://api.zeeg.me/v2/crm/people"
payload = {
"firstName": "Jane",
"lastName": "Doe",
"salutation": "Ms",
"emails": ["jane.doe@acme.com"],
"jobTitle": "Head of Product",
"description": "<string>",
"phoneNumber": "+4930123456789",
"primaryLocation": "Berlin, Germany",
"avatarUrl": "<string>",
"companyId": "<string>",
"socials": {
"linkedin": "<string>",
"twitter": "<string>",
"facebook": "<string>",
"instagram": "<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({
firstName: 'Jane',
lastName: 'Doe',
salutation: 'Ms',
emails: ['jane.doe@acme.com'],
jobTitle: 'Head of Product',
description: '<string>',
phoneNumber: '+4930123456789',
primaryLocation: 'Berlin, Germany',
avatarUrl: '<string>',
companyId: '<string>',
socials: {
linkedin: '<string>',
twitter: '<string>',
facebook: '<string>',
instagram: '<string>'
}
})
};
fetch('https://api.zeeg.me/v2/crm/people', 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.zeeg.me/v2/crm/people",
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([
'firstName' => 'Jane',
'lastName' => 'Doe',
'salutation' => 'Ms',
'emails' => [
'jane.doe@acme.com'
],
'jobTitle' => 'Head of Product',
'description' => '<string>',
'phoneNumber' => '+4930123456789',
'primaryLocation' => 'Berlin, Germany',
'avatarUrl' => '<string>',
'companyId' => '<string>',
'socials' => [
'linkedin' => '<string>',
'twitter' => '<string>',
'facebook' => '<string>',
'instagram' => '<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.zeeg.me/v2/crm/people"
payload := strings.NewReader("{\n \"firstName\": \"Jane\",\n \"lastName\": \"Doe\",\n \"salutation\": \"Ms\",\n \"emails\": [\n \"jane.doe@acme.com\"\n ],\n \"jobTitle\": \"Head of Product\",\n \"description\": \"<string>\",\n \"phoneNumber\": \"+4930123456789\",\n \"primaryLocation\": \"Berlin, Germany\",\n \"avatarUrl\": \"<string>\",\n \"companyId\": \"<string>\",\n \"socials\": {\n \"linkedin\": \"<string>\",\n \"twitter\": \"<string>\",\n \"facebook\": \"<string>\",\n \"instagram\": \"<string>\"\n }\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.zeeg.me/v2/crm/people")
.header("Authorization", "Bearer <token>")
.header("Content-Type", "application/json")
.body("{\n \"firstName\": \"Jane\",\n \"lastName\": \"Doe\",\n \"salutation\": \"Ms\",\n \"emails\": [\n \"jane.doe@acme.com\"\n ],\n \"jobTitle\": \"Head of Product\",\n \"description\": \"<string>\",\n \"phoneNumber\": \"+4930123456789\",\n \"primaryLocation\": \"Berlin, Germany\",\n \"avatarUrl\": \"<string>\",\n \"companyId\": \"<string>\",\n \"socials\": {\n \"linkedin\": \"<string>\",\n \"twitter\": \"<string>\",\n \"facebook\": \"<string>\",\n \"instagram\": \"<string>\"\n }\n}")
.asString();require 'uri'
require 'net/http'
url = URI("https://api.zeeg.me/v2/crm/people")
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 \"firstName\": \"Jane\",\n \"lastName\": \"Doe\",\n \"salutation\": \"Ms\",\n \"emails\": [\n \"jane.doe@acme.com\"\n ],\n \"jobTitle\": \"Head of Product\",\n \"description\": \"<string>\",\n \"phoneNumber\": \"+4930123456789\",\n \"primaryLocation\": \"Berlin, Germany\",\n \"avatarUrl\": \"<string>\",\n \"companyId\": \"<string>\",\n \"socials\": {\n \"linkedin\": \"<string>\",\n \"twitter\": \"<string>\",\n \"facebook\": \"<string>\",\n \"instagram\": \"<string>\"\n }\n}"
response = http.request(request)
puts response.read_body{
"success": true,
"status": 201,
"person": {
"id": "b2c3d4e5-f6a7-8901-bcde-f23456789012",
"firstName": "Jane",
"lastName": "Doe",
"salutation": "Ms",
"emails": [
"jane.doe@acme.com"
],
"jobTitle": "Head of Product",
"description": "Key decision-maker at Acme Corp.",
"phoneNumber": "+4930123456789",
"primaryLocation": "Berlin, Germany",
"avatarUrl": null,
"company": {
"id": "3c90c3cc-0d44-4b50-8888-8dd25736052a",
"name": "<string>",
"domain": "<string>"
},
"socials": {
"linkedin": "https://linkedin.com/in/janedoe",
"twitter": null,
"facebook": null,
"instagram": null
},
"customAttributes": {},
"createdAt": "2025-01-15T09:00:00+00:00",
"updatedAt": "2025-06-01T12:00:00+00:00"
}
}{
"message": "Unauthenticated."
}{
"success": true,
"message": "<string>",
"status": 123
}{
"message": "The given data was invalid.",
"errors": {
"field_name": [
"The field_name field is required."
]
}
}Name requirement
At least one offirstName or lastName must be provided.
Associating with a company
PasscompanyId with the UUID of an existing CRM company to link the person to that company.
Social links
Pass social profile URLs as a nestedsocials object:
{
"firstName": "Jane",
"lastName": "Doe",
"socials": {
"linkedin": "https://linkedin.com/in/janedoe",
"twitter": "https://twitter.com/janedoe"
}
}
Authorizations
Body
First name. Required if lastName is not provided.
"Jane"
Last name. Required if firstName is not provided.
"Doe"
Salutation or title.
"Ms"
List of email addresses. The first entry becomes the primary email.
["jane.doe@acme.com"]Job title or role.
"Head of Product"
Free-text description or notes.
Primary phone number.
"+4930123456789"
Primary location or city.
"Berlin, Germany"
URL of the person's avatar image.
UUID of the CRM company to associate this person with.
Response
Created
true
201
A CRM person record.
Hide child attributes
Hide child attributes
Unique identifier for the person record.
"b2c3d4e5-f6a7-8901-bcde-f23456789012"
First name.
"Jane"
Last name.
"Doe"
Salutation or title (e.g. Mr, Ms, Dr).
"Ms"
List of email addresses. The first entry is the primary email.
["jane.doe@acme.com"]Job title or role.
"Head of Product"
Free-text description or notes about the person.
"Key decision-maker at Acme Corp."
Primary phone number.
"+4930123456789"
Primary location or city.
"Berlin, Germany"
URL of the person's avatar image.
null
Key/value pairs for custom attributes defined on the people object.
{}ISO 8601 timestamp when the record was created.
"2025-01-15T09:00:00+00:00"
ISO 8601 timestamp when the record was last updated.
"2025-06-01T12:00:00+00:00"
curl --request POST \
--url https://api.zeeg.me/v2/crm/people \
--header 'Authorization: Bearer <token>' \
--header 'Content-Type: application/json' \
--data '
{
"firstName": "Jane",
"lastName": "Doe",
"salutation": "Ms",
"emails": [
"jane.doe@acme.com"
],
"jobTitle": "Head of Product",
"description": "<string>",
"phoneNumber": "+4930123456789",
"primaryLocation": "Berlin, Germany",
"avatarUrl": "<string>",
"companyId": "<string>",
"socials": {
"linkedin": "<string>",
"twitter": "<string>",
"facebook": "<string>",
"instagram": "<string>"
}
}
'import requests
url = "https://api.zeeg.me/v2/crm/people"
payload = {
"firstName": "Jane",
"lastName": "Doe",
"salutation": "Ms",
"emails": ["jane.doe@acme.com"],
"jobTitle": "Head of Product",
"description": "<string>",
"phoneNumber": "+4930123456789",
"primaryLocation": "Berlin, Germany",
"avatarUrl": "<string>",
"companyId": "<string>",
"socials": {
"linkedin": "<string>",
"twitter": "<string>",
"facebook": "<string>",
"instagram": "<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({
firstName: 'Jane',
lastName: 'Doe',
salutation: 'Ms',
emails: ['jane.doe@acme.com'],
jobTitle: 'Head of Product',
description: '<string>',
phoneNumber: '+4930123456789',
primaryLocation: 'Berlin, Germany',
avatarUrl: '<string>',
companyId: '<string>',
socials: {
linkedin: '<string>',
twitter: '<string>',
facebook: '<string>',
instagram: '<string>'
}
})
};
fetch('https://api.zeeg.me/v2/crm/people', 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.zeeg.me/v2/crm/people",
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([
'firstName' => 'Jane',
'lastName' => 'Doe',
'salutation' => 'Ms',
'emails' => [
'jane.doe@acme.com'
],
'jobTitle' => 'Head of Product',
'description' => '<string>',
'phoneNumber' => '+4930123456789',
'primaryLocation' => 'Berlin, Germany',
'avatarUrl' => '<string>',
'companyId' => '<string>',
'socials' => [
'linkedin' => '<string>',
'twitter' => '<string>',
'facebook' => '<string>',
'instagram' => '<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.zeeg.me/v2/crm/people"
payload := strings.NewReader("{\n \"firstName\": \"Jane\",\n \"lastName\": \"Doe\",\n \"salutation\": \"Ms\",\n \"emails\": [\n \"jane.doe@acme.com\"\n ],\n \"jobTitle\": \"Head of Product\",\n \"description\": \"<string>\",\n \"phoneNumber\": \"+4930123456789\",\n \"primaryLocation\": \"Berlin, Germany\",\n \"avatarUrl\": \"<string>\",\n \"companyId\": \"<string>\",\n \"socials\": {\n \"linkedin\": \"<string>\",\n \"twitter\": \"<string>\",\n \"facebook\": \"<string>\",\n \"instagram\": \"<string>\"\n }\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.zeeg.me/v2/crm/people")
.header("Authorization", "Bearer <token>")
.header("Content-Type", "application/json")
.body("{\n \"firstName\": \"Jane\",\n \"lastName\": \"Doe\",\n \"salutation\": \"Ms\",\n \"emails\": [\n \"jane.doe@acme.com\"\n ],\n \"jobTitle\": \"Head of Product\",\n \"description\": \"<string>\",\n \"phoneNumber\": \"+4930123456789\",\n \"primaryLocation\": \"Berlin, Germany\",\n \"avatarUrl\": \"<string>\",\n \"companyId\": \"<string>\",\n \"socials\": {\n \"linkedin\": \"<string>\",\n \"twitter\": \"<string>\",\n \"facebook\": \"<string>\",\n \"instagram\": \"<string>\"\n }\n}")
.asString();require 'uri'
require 'net/http'
url = URI("https://api.zeeg.me/v2/crm/people")
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 \"firstName\": \"Jane\",\n \"lastName\": \"Doe\",\n \"salutation\": \"Ms\",\n \"emails\": [\n \"jane.doe@acme.com\"\n ],\n \"jobTitle\": \"Head of Product\",\n \"description\": \"<string>\",\n \"phoneNumber\": \"+4930123456789\",\n \"primaryLocation\": \"Berlin, Germany\",\n \"avatarUrl\": \"<string>\",\n \"companyId\": \"<string>\",\n \"socials\": {\n \"linkedin\": \"<string>\",\n \"twitter\": \"<string>\",\n \"facebook\": \"<string>\",\n \"instagram\": \"<string>\"\n }\n}"
response = http.request(request)
puts response.read_body{
"success": true,
"status": 201,
"person": {
"id": "b2c3d4e5-f6a7-8901-bcde-f23456789012",
"firstName": "Jane",
"lastName": "Doe",
"salutation": "Ms",
"emails": [
"jane.doe@acme.com"
],
"jobTitle": "Head of Product",
"description": "Key decision-maker at Acme Corp.",
"phoneNumber": "+4930123456789",
"primaryLocation": "Berlin, Germany",
"avatarUrl": null,
"company": {
"id": "3c90c3cc-0d44-4b50-8888-8dd25736052a",
"name": "<string>",
"domain": "<string>"
},
"socials": {
"linkedin": "https://linkedin.com/in/janedoe",
"twitter": null,
"facebook": null,
"instagram": null
},
"customAttributes": {},
"createdAt": "2025-01-15T09:00:00+00:00",
"updatedAt": "2025-06-01T12:00:00+00:00"
}
}{
"message": "Unauthenticated."
}{
"success": true,
"message": "<string>",
"status": 123
}{
"message": "The given data was invalid.",
"errors": {
"field_name": [
"The field_name field is required."
]
}
}