Assert a CRM Company
Create or update a CRM company in the Zeeg CRM API, matched by domain. Upserts companies for bulk imports and sync jobs without pre-checking.
curl --request PUT \
--url https://api.zeeg.me/v2/crm/companies \
--header 'Authorization: Bearer <token>' \
--header 'Content-Type: application/json' \
--data '
{
"name": "Acme Corp",
"domain": "acme.com",
"description": "<string>",
"websiteUrl": "<string>",
"primaryLocation": "<string>",
"socials": {
"linkedin": "<string>",
"twitter": "<string>",
"facebook": "<string>",
"instagram": "<string>"
}
}
'import requests
url = "https://api.zeeg.me/v2/crm/companies"
payload = {
"name": "Acme Corp",
"domain": "acme.com",
"description": "<string>",
"websiteUrl": "<string>",
"primaryLocation": "<string>",
"socials": {
"linkedin": "<string>",
"twitter": "<string>",
"facebook": "<string>",
"instagram": "<string>"
}
}
headers = {
"Authorization": "Bearer <token>",
"Content-Type": "application/json"
}
response = requests.put(url, json=payload, headers=headers)
print(response.text)const options = {
method: 'PUT',
headers: {Authorization: 'Bearer <token>', 'Content-Type': 'application/json'},
body: JSON.stringify({
name: 'Acme Corp',
domain: 'acme.com',
description: '<string>',
websiteUrl: '<string>',
primaryLocation: '<string>',
socials: {
linkedin: '<string>',
twitter: '<string>',
facebook: '<string>',
instagram: '<string>'
}
})
};
fetch('https://api.zeeg.me/v2/crm/companies', 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/companies",
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => "",
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 30,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => "PUT",
CURLOPT_POSTFIELDS => json_encode([
'name' => 'Acme Corp',
'domain' => 'acme.com',
'description' => '<string>',
'websiteUrl' => '<string>',
'primaryLocation' => '<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/companies"
payload := strings.NewReader("{\n \"name\": \"Acme Corp\",\n \"domain\": \"acme.com\",\n \"description\": \"<string>\",\n \"websiteUrl\": \"<string>\",\n \"primaryLocation\": \"<string>\",\n \"socials\": {\n \"linkedin\": \"<string>\",\n \"twitter\": \"<string>\",\n \"facebook\": \"<string>\",\n \"instagram\": \"<string>\"\n }\n}")
req, _ := http.NewRequest("PUT", 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.put("https://api.zeeg.me/v2/crm/companies")
.header("Authorization", "Bearer <token>")
.header("Content-Type", "application/json")
.body("{\n \"name\": \"Acme Corp\",\n \"domain\": \"acme.com\",\n \"description\": \"<string>\",\n \"websiteUrl\": \"<string>\",\n \"primaryLocation\": \"<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/companies")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Put.new(url)
request["Authorization"] = 'Bearer <token>'
request["Content-Type"] = 'application/json'
request.body = "{\n \"name\": \"Acme Corp\",\n \"domain\": \"acme.com\",\n \"description\": \"<string>\",\n \"websiteUrl\": \"<string>\",\n \"primaryLocation\": \"<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": 200,
"company": {
"id": "a1b2c3d4-e5f6-7890-abcd-ef1234567890",
"name": "Acme Corp",
"domain": "acme.com",
"description": "A global provider of anvils and gadgets.",
"websiteUrl": "https://acme.com",
"primaryLocation": "Phoenix, AZ",
"industries": [
"technology"
],
"socials": {
"linkedin": "https://linkedin.com/company/acme",
"twitter": null,
"facebook": null,
"instagram": null
},
"customAttributes": {},
"createdAt": "2025-01-15T09:00:00+00:00",
"updatedAt": "2025-06-01T12:00:00+00:00"
}
}{
"success": true,
"status": 201,
"company": {
"id": "a1b2c3d4-e5f6-7890-abcd-ef1234567890",
"name": "Acme Corp",
"domain": "acme.com",
"description": "A global provider of anvils and gadgets.",
"websiteUrl": "https://acme.com",
"primaryLocation": "Phoenix, AZ",
"industries": [
"technology"
],
"socials": {
"linkedin": "https://linkedin.com/company/acme",
"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."
]
}
}- If a company with the same
domainis found → it is updated and200is returned. - If no match is found → a new company is created and
201is returned.
Matching attribute
ThematchingAttribute query parameter specifies which field to use for the lookup. Currently only domain is supported, as it is the only unique attribute on companies.
PUT /v2/crm/companies?matchingAttribute=domain
Use case
Assert is the recommended endpoint for bulk imports and sync jobs. Send your full company payload and let the API decide whether to create or update — no need to pre-check for duplicates.{
"name": "Acme Corp",
"domain": "acme.com",
"websiteUrl": "https://acme.com",
"primaryLocation": "Berlin, Germany",
"socials": {
"linkedin": "https://linkedin.com/company/acme"
}
}
Authorizations
Query Parameters
Attribute to use when searching for an existing company. Only domain is supported.
domain Body
"Acme Corp"
"acme.com"
Response
Updated — a company with the matching domain was found and updated
true
200
A CRM company record.
Hide child attributes
Hide child attributes
Unique identifier for the company record.
"a1b2c3d4-e5f6-7890-abcd-ef1234567890"
Display name of the company.
"Acme Corp"
Primary domain. Unique within the workspace. Used as the matching attribute for upsert.
"acme.com"
Free-text description of the company.
"A global provider of anvils and gadgets."
Company website URL.
"https://acme.com"
Primary location or address.
"Phoenix, AZ"
List of industry IDs assigned to the company.
["technology"]Key/value pairs for custom attributes defined on the companies 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 PUT \
--url https://api.zeeg.me/v2/crm/companies \
--header 'Authorization: Bearer <token>' \
--header 'Content-Type: application/json' \
--data '
{
"name": "Acme Corp",
"domain": "acme.com",
"description": "<string>",
"websiteUrl": "<string>",
"primaryLocation": "<string>",
"socials": {
"linkedin": "<string>",
"twitter": "<string>",
"facebook": "<string>",
"instagram": "<string>"
}
}
'import requests
url = "https://api.zeeg.me/v2/crm/companies"
payload = {
"name": "Acme Corp",
"domain": "acme.com",
"description": "<string>",
"websiteUrl": "<string>",
"primaryLocation": "<string>",
"socials": {
"linkedin": "<string>",
"twitter": "<string>",
"facebook": "<string>",
"instagram": "<string>"
}
}
headers = {
"Authorization": "Bearer <token>",
"Content-Type": "application/json"
}
response = requests.put(url, json=payload, headers=headers)
print(response.text)const options = {
method: 'PUT',
headers: {Authorization: 'Bearer <token>', 'Content-Type': 'application/json'},
body: JSON.stringify({
name: 'Acme Corp',
domain: 'acme.com',
description: '<string>',
websiteUrl: '<string>',
primaryLocation: '<string>',
socials: {
linkedin: '<string>',
twitter: '<string>',
facebook: '<string>',
instagram: '<string>'
}
})
};
fetch('https://api.zeeg.me/v2/crm/companies', 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/companies",
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => "",
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 30,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => "PUT",
CURLOPT_POSTFIELDS => json_encode([
'name' => 'Acme Corp',
'domain' => 'acme.com',
'description' => '<string>',
'websiteUrl' => '<string>',
'primaryLocation' => '<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/companies"
payload := strings.NewReader("{\n \"name\": \"Acme Corp\",\n \"domain\": \"acme.com\",\n \"description\": \"<string>\",\n \"websiteUrl\": \"<string>\",\n \"primaryLocation\": \"<string>\",\n \"socials\": {\n \"linkedin\": \"<string>\",\n \"twitter\": \"<string>\",\n \"facebook\": \"<string>\",\n \"instagram\": \"<string>\"\n }\n}")
req, _ := http.NewRequest("PUT", 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.put("https://api.zeeg.me/v2/crm/companies")
.header("Authorization", "Bearer <token>")
.header("Content-Type", "application/json")
.body("{\n \"name\": \"Acme Corp\",\n \"domain\": \"acme.com\",\n \"description\": \"<string>\",\n \"websiteUrl\": \"<string>\",\n \"primaryLocation\": \"<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/companies")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Put.new(url)
request["Authorization"] = 'Bearer <token>'
request["Content-Type"] = 'application/json'
request.body = "{\n \"name\": \"Acme Corp\",\n \"domain\": \"acme.com\",\n \"description\": \"<string>\",\n \"websiteUrl\": \"<string>\",\n \"primaryLocation\": \"<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": 200,
"company": {
"id": "a1b2c3d4-e5f6-7890-abcd-ef1234567890",
"name": "Acme Corp",
"domain": "acme.com",
"description": "A global provider of anvils and gadgets.",
"websiteUrl": "https://acme.com",
"primaryLocation": "Phoenix, AZ",
"industries": [
"technology"
],
"socials": {
"linkedin": "https://linkedin.com/company/acme",
"twitter": null,
"facebook": null,
"instagram": null
},
"customAttributes": {},
"createdAt": "2025-01-15T09:00:00+00:00",
"updatedAt": "2025-06-01T12:00:00+00:00"
}
}{
"success": true,
"status": 201,
"company": {
"id": "a1b2c3d4-e5f6-7890-abcd-ef1234567890",
"name": "Acme Corp",
"domain": "acme.com",
"description": "A global provider of anvils and gadgets.",
"websiteUrl": "https://acme.com",
"primaryLocation": "Phoenix, AZ",
"industries": [
"technology"
],
"socials": {
"linkedin": "https://linkedin.com/company/acme",
"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."
]
}
}