> ## Documentation Index
> Fetch the complete documentation index at: https://developer.zeeg.me/llms.txt
> Use this file to discover all available pages before exploring further.

# 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

Returns a paginated list of records for a custom CRM object. Use this endpoint to browse all records for any object you've created — products, deals, subscriptions, or any other custom object in your workspace.

## Path parameter

| Parameter    | Type   | Description                                                                                                                        |
| ------------ | ------ | ---------------------------------------------------------------------------------------------------------------------------------- |
| `objectSlug` | string | The slug of the custom CRM object. Must already exist. Discover available slugs via [List CRM Objects](/api/crm/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 the `records` 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.                                               |

The `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 inside `attributes`) are defined on the object schema. To see all available attribute slugs and their types, call [`GET /v2/crm/objects/{slug}`](/api/crm/get-a-crm-object) 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
```

Keep requesting until `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`.


## OpenAPI

````yaml GET /crm/{objectSlug}
openapi: 3.0.0
info:
  title: Zeeg Public API
  description: >-
    Zeeg public API documentation.


    ## Authentication

    All endpoints require a Bearer token. You can generate an API token from
    [your Zeeg dashboard](https://app.zeeg.me/account/settings/api-access).


    Each token is scoped to specific permissions (e.g. `events:read`,
    `webhooks:write`). Make sure your token has the required scopes for the
    endpoints you want to use.


    ## Recommended Headers

    We recommend including the `Accept: application/json` header in all API
    requests to ensure you receive JSON responses.
  version: 2.0.0
  x-logo:
    url: https://app.zeeg.me/img/logo-dark.2ca83593.svg
    backgroundColor: '#f7f7f9'
    altText: zeeg
  contact:
    name: Zeeg Support
    email: support@zeeg.me
    url: https://zeeg.me/en/contact
  license:
    name: Proprietary
    url: https://zeeg.me/en/legal/terms
  termsOfService: https://zeeg.me/en/legal/terms
servers:
  - url: https://api.zeeg.me/v2
    description: Production
security:
  - bearer: []
tags:
  - name: Scheduled Events
    description: Management of events scheduled via Zeeg
  - name: Scheduling Pages
    description: Scheduling pages information and management
  - name: Availability Schedule
    description: Read and change availability for users
  - name: Webhooks
    description: Webhooks management
  - name: Notes
    description: Notes for scheduled events
  - name: Workspaces & Teams
    description: Workspace users and team member management
  - name: AI Agent
    description: AI Agent integration endpoints
  - name: Payloads
    description: Webhook payload schemas
  - name: CRM - Objects
    description: >-
      Discover the schema of CRM objects (standard and custom) including all
      attribute definitions
  - name: CRM - Companies
    description: Create, read, update, and delete CRM company records
  - name: CRM - People
    description: Create, read, update, and delete CRM person records
paths:
  /crm/{objectSlug}:
    get:
      tags:
        - CRM - Records
      summary: List CRM records
      description: |-
        Returns a paginated list of records for a custom CRM object.

        **Required scope:** `crm:read` or `crm:write`
      operationId: get-crm-records
      parameters:
        - name: objectSlug
          in: path
          required: true
          schema:
            type: string
          description: Slug of the custom CRM object.
          example: products
        - schema:
            type: integer
            default: 1
            minimum: 1
          in: query
          name: page
          description: Page number.
        - name: perPage
          in: query
          schema:
            type: integer
            minimum: 1
            maximum: 100
            default: 10
          description: Number of records per page.
        - name: sortBy
          in: query
          schema:
            type: string
            default: created_at
          description: Attribute slug to sort by.
        - name: sortOrder
          in: query
          schema:
            type: string
            default: asc
            enum:
              - asc
              - desc
          description: Sort direction.
      responses:
        '200':
          description: OK
          content:
            application/json:
              schema:
                type: object
                properties:
                  success:
                    type: boolean
                    example: true
                  status:
                    type: integer
                    example: 200
                  data:
                    type: object
                    properties:
                      pagination:
                        type: object
                        properties:
                          totalItems:
                            type: integer
                          perPage:
                            type: integer
                          currentPage:
                            type: integer
                          lastPage:
                            type: integer
                          hasPreviousPage:
                            type: boolean
                          hasNextPage:
                            type: boolean
                      records:
                        type: array
                        items:
                          $ref: '#/components/schemas/CrmRecord'
              examples:
                Success:
                  value:
                    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'
        '401':
          $ref: '#/components/responses/401'
        '403':
          description: Forbidden — missing scope or CRM not enabled
          content:
            application/json:
              schema:
                type: object
                properties:
                  success:
                    type: boolean
                  message:
                    type: string
                  status:
                    type: integer
      security:
        - bearer: []
components:
  schemas:
    CrmRecord:
      type: object
      description: A record for a custom CRM object.
      required:
        - id
        - objectSlug
        - attributes
        - createdAt
        - updatedAt
      properties:
        id:
          type: string
          format: uuid
          description: Unique identifier for the record.
          example: c1d2e3f4-a5b6-7890-cdef-123456789012
        objectSlug:
          type: string
          description: Slug of the CRM object this record belongs to.
          example: products
        attributes:
          type: object
          description: >-
            Key/value pairs for the custom attributes defined on the object.
            Keys are attribute slugs.
          additionalProperties: true
          example:
            sku: DRESS-001
            price: 29
            inventory_count: 150
        createdAt:
          type: string
          format: date-time
          description: ISO 8601 timestamp when the record was created.
          example: '2025-06-01T10:00:00+00:00'
        updatedAt:
          type: string
          format: date-time
          description: ISO 8601 timestamp when the record was last updated.
          example: '2025-06-01T12:00:00+00:00'
  responses:
    '401':
      description: Unauthorized
      content:
        application/json:
          schema:
            type: object
            properties:
              message:
                type: string
                example: Unauthenticated.
          examples:
            Unauthenticated:
              value:
                message: Unauthenticated.
  securitySchemes:
    bearer:
      type: http
      scheme: bearer
      description: ''

````