Records
Create a CRM Record
Create a new record in a custom Zeeg CRM object by slug, setting typed attribute values that are validated on submit, and get back a generated record UUID
POST
Create a CRM record
Creates a new record for a custom CRM object and returns it with a generated UUID.
Use
Option IDs for
Path parameter
| Parameter | Type | Description |
|---|---|---|
objectSlug | string | The slug of the custom CRM object to create a record in (e.g. products, deals). The object must exist. |
Request body
Pass a flat JSON object where each key is an attribute slug and each value is the attribute value. You only need to include attributes you want to set — omitted attributes default tonull.
GET /v2/crm/objects/{slug} to discover the available attribute slugs and their types before writing records.
Attribute types
Values are validated against the type defined on the object. Passing the wrong type returns a400 error.
| Type | Expected value | Example |
|---|---|---|
text | String, max 255 characters | "DRESS-001" |
number | Integer | 29 |
checkbox | Boolean | true or false |
date | ISO 8601 date string | "2025-06-01" |
select | Object with an id key matching a valid option ID | { "id": "opt_abc123" } |
multiselect | Array of objects, each with an id key | [{ "id": "opt_abc" }, { "id": "opt_def" }] |
relation | Array of record UUIDs from the related object | ["c1d2e3f4-...", "a2b3c4d5-..."] |
user | Array of organization member UUIDs | ["member-uuid-1"] |
select and multiselect attributes are returned when you fetch the object schema via GET /v2/crm/objects/{slug}.
Unique attributes
If an attribute is marked asisUnique, submitting a value that already exists on another record returns a 400 error. Check for uniqueness constraints in the object schema before creating records in bulk.
Minimal record creation
You can create a record with no attributes at all — useful when you want to allocate an ID first and fill in data later:When to use this endpoint
- Single record creation — a user fills a form and submits a new product, deal, or custom entry.
- One-off imports — create a small number of known records programmatically.
- Initial seeding — populate a new object with a handful of records before bulk operations.
For bulk imports where records may already exist, prefer Assert (upsert) instead. It creates when no match is found and updates when one is found — eliminating the need to pre-check for duplicates.
Last modified on June 11, 2026