Records
Get a CRM Record
Retrieve a single custom CRM object record by UUID with the Zeeg CRM API, returning all its attribute values keyed by attribute slug
GET
/
crm
/
{objectSlug}
/
{recordId}
Get a CRM record
curl --request GET \
--url https://api.zeeg.me/v2/crm/{objectSlug}/{recordId} \
--header 'Authorization: Bearer <token>'import requests
url = "https://api.zeeg.me/v2/crm/{objectSlug}/{recordId}"
headers = {"Authorization": "Bearer <token>"}
response = requests.get(url, headers=headers)
print(response.text)const options = {method: 'GET', headers: {Authorization: 'Bearer <token>'}};
fetch('https://api.zeeg.me/v2/crm/{objectSlug}/{recordId}', 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/{objectSlug}/{recordId}",
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => "",
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 30,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => "GET",
CURLOPT_HTTPHEADER => [
"Authorization: Bearer <token>"
],
]);
$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.zeeg.me/v2/crm/{objectSlug}/{recordId}"
req, _ := http.NewRequest("GET", url, nil)
req.Header.Add("Authorization", "Bearer <token>")
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.zeeg.me/v2/crm/{objectSlug}/{recordId}")
.header("Authorization", "Bearer <token>")
.asString();require 'uri'
require 'net/http'
url = URI("https://api.zeeg.me/v2/crm/{objectSlug}/{recordId}")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Get.new(url)
request["Authorization"] = 'Bearer <token>'
response = http.request(request)
puts response.read_body{
"success": true,
"status": 200,
"record": {
"id": "c1d2e3f4-a5b6-7890-cdef-123456789012",
"objectSlug": "products",
"attributes": {
"sku": "DRESS-001",
"price": 29,
"inventory_count": 150
},
"createdAt": "2025-06-01T10:00:00+00:00",
"updatedAt": "2025-06-01T12:00:00+00:00"
}
}{
"message": "Unauthenticated."
}{
"error": {
"type": "insufficient_scope",
"message": "Your token is missing the required scope(s). Include at least one of: crm:read, crm:write.",
"error_id": "97bc8f3f-5a33-467a-83de-e7ada9e31305",
"required_scopes": [
"crm:read",
"crm:write"
]
}
}{
"success": false,
"message": "Record not found.",
"status": 404
}Returns a single record for a custom CRM object by its UUID.
Understanding the
Attribute keys inside
To know which keys to expect and their types, call
Path parameters
Response shape
| Field | Type | Description |
|---|---|---|
id | string (UUID) | Unique identifier for the record. |
objectSlug | string | The object this record belongs to (e.g. products). |
attributes | object | All attribute values for this record, keyed by attribute slug. Attributes that have not been set are returned as null. |
createdAt | string (ISO 8601) | Timestamp when the record was created. |
updatedAt | string (ISO 8601) | Timestamp when the record was last modified. |
Understanding the attributes object
Attribute keys inside attributes match the slugs defined on the object schema. The shape of the object depends entirely on which attributes exist on that CRM object.
For example, a products object with attributes sku, price, and in_stock returns:
{
"record": {
"id": "c1d2e3f4-a5b6-7890-cdef-123456789012",
"objectSlug": "products",
"attributes": {
"sku": "DRESS-001",
"price": 29,
"in_stock": true
},
"createdAt": "2025-06-01T10:00:00+00:00",
"updatedAt": "2025-06-01T10:00:00+00:00"
}
}
GET /v2/crm/objects/{slug}.
404 Not Found
If either the object slug does not exist in your workspace, or the record ID does not belong to that object, the API returns404:
{
"success": false,
"message": "Record not found.",
"status": 404
}
When to use this endpoint
- Detail view — display a single record’s full data after the user clicks a row.
- Verification — confirm a record still exists and fetch its latest values before displaying or editing.
- Webhook handlers — look up a record by the ID received in a webhook payload.
Authorizations
Path Parameters
Slug of the custom CRM object.
UUID of the record.
Response
OK
Example:
true
Example:
200
A record for a custom CRM object.
Hide child attributes
Hide child attributes
Unique identifier for the record.
Example:
"c1d2e3f4-a5b6-7890-cdef-123456789012"
Slug of the CRM object this record belongs to.
Example:
"products"
Key/value pairs for the custom attributes defined on the object. Keys are attribute slugs.
Example:
{
"sku": "DRESS-001",
"price": 29,
"inventory_count": 150
}
ISO 8601 timestamp when the record was created.
Example:
"2025-06-01T10:00:00+00:00"
ISO 8601 timestamp when the record was last updated.
Example:
"2025-06-01T12:00:00+00:00"
Last modified on June 11, 2026
⌘I
Get a CRM record
curl --request GET \
--url https://api.zeeg.me/v2/crm/{objectSlug}/{recordId} \
--header 'Authorization: Bearer <token>'import requests
url = "https://api.zeeg.me/v2/crm/{objectSlug}/{recordId}"
headers = {"Authorization": "Bearer <token>"}
response = requests.get(url, headers=headers)
print(response.text)const options = {method: 'GET', headers: {Authorization: 'Bearer <token>'}};
fetch('https://api.zeeg.me/v2/crm/{objectSlug}/{recordId}', 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/{objectSlug}/{recordId}",
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => "",
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 30,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => "GET",
CURLOPT_HTTPHEADER => [
"Authorization: Bearer <token>"
],
]);
$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.zeeg.me/v2/crm/{objectSlug}/{recordId}"
req, _ := http.NewRequest("GET", url, nil)
req.Header.Add("Authorization", "Bearer <token>")
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.zeeg.me/v2/crm/{objectSlug}/{recordId}")
.header("Authorization", "Bearer <token>")
.asString();require 'uri'
require 'net/http'
url = URI("https://api.zeeg.me/v2/crm/{objectSlug}/{recordId}")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Get.new(url)
request["Authorization"] = 'Bearer <token>'
response = http.request(request)
puts response.read_body{
"success": true,
"status": 200,
"record": {
"id": "c1d2e3f4-a5b6-7890-cdef-123456789012",
"objectSlug": "products",
"attributes": {
"sku": "DRESS-001",
"price": 29,
"inventory_count": 150
},
"createdAt": "2025-06-01T10:00:00+00:00",
"updatedAt": "2025-06-01T12:00:00+00:00"
}
}{
"message": "Unauthenticated."
}{
"error": {
"type": "insufficient_scope",
"message": "Your token is missing the required scope(s). Include at least one of: crm:read, crm:write.",
"error_id": "97bc8f3f-5a33-467a-83de-e7ada9e31305",
"required_scopes": [
"crm:read",
"crm:write"
]
}
}{
"success": false,
"message": "Record not found.",
"status": 404
}