List CRM Records
List paginated records of any custom CRM object in Zeeg by object slug, with sorting and pagination controls for browsing, export, and sync jobs
curl --request GET \
--url https://api.zeeg.me/v2/crm/{objectSlug} \
--header 'Authorization: Bearer <token>'import requests
url = "https://api.zeeg.me/v2/crm/{objectSlug}"
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}', 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}",
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}"
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}")
.header("Authorization", "Bearer <token>")
.asString();require 'uri'
require 'net/http'
url = URI("https://api.zeeg.me/v2/crm/{objectSlug}")
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,
"data": {
"pagination": {
"totalItems": 1,
"perPage": 10,
"currentPage": 1,
"lastPage": 1,
"hasPreviousPage": false,
"hasNextPage": false
},
"records": [
{
"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-01T10: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": "c15cef8e-008a-4637-b866-5de870eeb5dd",
"required_scopes": [
"crm:read",
"crm:write"
]
}
}{
"success": false,
"message": "Object not found.",
"status": 404
}Path parameter
| Parameter | Type | Description |
|---|---|---|
objectSlug | string | The slug of the custom CRM object. Must already exist. Discover available slugs via List CRM Objects. |
Query parameters
| Parameter | Type | Default | Description |
|---|---|---|---|
page | integer | 1 | Page number. Starts at 1. |
perPage | integer | 10 | Number of records returned per page. Maximum is 100. |
sortBy | string | created_at | Attribute slug to sort by. Pass the exact attribute key (e.g. price, sku). Use created_at or updated_at for system timestamps. |
sortOrder | string | asc | Sort direction. Either asc (oldest/lowest first) or desc (newest/highest first). |
Response shape
Each record in therecords array contains:
| Field | Type | Description |
|---|---|---|
id | string (UUID) | Unique identifier for the record. Store this on your side to avoid re-fetching. |
objectSlug | string | The object this record belongs to. |
attributes | object | All attribute values keyed by their attribute slug. Unset attributes are null. |
createdAt | string (ISO 8601) | When the record was created. |
updatedAt | string (ISO 8601) | When the record was last modified. |
pagination wrapper contains:
| Field | Type | Description |
|---|---|---|
totalItems | integer | Total number of records across all pages. |
perPage | integer | Records per page as requested. |
currentPage | integer | The page returned in this response. |
lastPage | integer | Total number of pages. |
hasPreviousPage | boolean | true when a previous page exists. |
hasNextPage | boolean | true when a next page exists. |
Discovering attribute keys
Attribute keys (the keys insideattributes) are defined on the object schema. To see all available attribute slugs and their types, call GET /v2/crm/objects/{slug} before building a UI or processing the response.
Pagination example
To iterate through all records in pages of 50, ordered newest first:GET /v2/crm/products?perPage=50&sortBy=created_at&sortOrder=desc&page=1
GET /v2/crm/products?perPage=50&sortBy=created_at&sortOrder=desc&page=2
hasNextPage is false.
When to use this endpoint
- Browsing — display a table of records in your UI.
- Export — page through all records to write them to another system.
- Sync jobs — poll for recently updated records with
sortBy=updated_at&sortOrder=desc.
Authorizations
Path Parameters
Slug of the custom CRM object.
Query Parameters
Page number.
x >= 1Number of records per page.
1 <= x <= 100Attribute slug to sort by.
Sort direction.
asc, desc Free text. Returns the records whose title attribute contains it, ignoring case. % and _ match only themselves.
255Response
OK
true
200
Hide child attributes
Hide child attributes
Hide child attributes
Hide child attributes
Unique identifier for the record.
"c1d2e3f4-a5b6-7890-cdef-123456789012"
Slug of the CRM object this record belongs to.
"products"
Key/value pairs for the custom attributes defined on the object. Keys are attribute slugs.
{
"sku": "DRESS-001",
"price": 29,
"inventory_count": 150
}
ISO 8601 timestamp when the record was created.
"2025-06-01T10:00:00+00:00"
ISO 8601 timestamp when the record was last updated.
"2025-06-01T12:00:00+00:00"
curl --request GET \
--url https://api.zeeg.me/v2/crm/{objectSlug} \
--header 'Authorization: Bearer <token>'import requests
url = "https://api.zeeg.me/v2/crm/{objectSlug}"
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}', 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}",
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}"
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}")
.header("Authorization", "Bearer <token>")
.asString();require 'uri'
require 'net/http'
url = URI("https://api.zeeg.me/v2/crm/{objectSlug}")
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,
"data": {
"pagination": {
"totalItems": 1,
"perPage": 10,
"currentPage": 1,
"lastPage": 1,
"hasPreviousPage": false,
"hasNextPage": false
},
"records": [
{
"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-01T10: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": "c15cef8e-008a-4637-b866-5de870eeb5dd",
"required_scopes": [
"crm:read",
"crm:write"
]
}
}{
"success": false,
"message": "Object not found.",
"status": 404
}