> ## 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.

# Patch a CRM Record

> Update a CRM record by ID via the Zeeg CRM API by sending only the attributes to change; every other field on the record stays untouched.

Partially updates a CRM record. Only the attributes you include in the request body are changed — all other attributes remain exactly as they are.

## Path parameters

| Parameter    | Type          | Description                                              |
| ------------ | ------------- | -------------------------------------------------------- |
| `objectSlug` | string        | The slug of the custom CRM object the record belongs to. |
| `recordId`   | string (UUID) | The UUID of the record to update.                        |

## Request body

A flat JSON object containing only the attribute slug → value pairs you want to change. Attributes not present in the body are untouched.

```json theme={null}
{
  "price": 49,
  "in_stock": false
}
```

This updates `price` and `in_stock` only. Every other attribute on the record keeps its current value.

## PATCH vs. Assert

|          | `PATCH /{objectSlug}/{recordId}`      | `PUT /{objectSlug}?matchingAttribute=...`          |
| -------- | ------------------------------------- | -------------------------------------------------- |
| Lookup   | By record `id`                        | By attribute value                                 |
| Scope    | Only provided attributes change       | Full body applied (omitted attrs → null on create) |
| Use case | Edit a known record's specific fields | Sync/upsert from an external system                |

Use PATCH when you have the record ID and only want to update certain fields. Use Assert when syncing from an external source or when you don't have the ID yet.

## Attribute types

The same type rules apply as when creating a record:

| Type          | Expected value                     | Example                  |
| ------------- | ---------------------------------- | ------------------------ |
| `text`        | String, max 255 characters         | `"Updated name"`         |
| `number`      | Integer                            | `49`                     |
| `checkbox`    | Boolean                            | `false`                  |
| `date`        | ISO 8601 date string               | `"2025-12-31"`           |
| `select`      | Object with an `id` key            | `{ "id": "opt_abc123" }` |
| `multiselect` | Array of option objects            | `[{ "id": "opt_abc" }]`  |
| `relation`    | Array of related record UUIDs      | `["uuid-1", "uuid-2"]`   |
| `user`        | Array of organization member UUIDs | `["member-uuid-1"]`      |

<Note>
  For `relation` and `user` attributes, PATCH replaces the entire array. To add or remove individual IDs without overwriting the full list, use [Update Relation](/api/crm/update-relation-crm-record) instead.
</Note>

## Clearing a value

To explicitly clear an attribute, pass `null`:

```json theme={null}
{
  "launched_at": null
}
```

## Example: update price and stock status

```json theme={null}
PATCH /v2/crm/products/c1d2e3f4-a5b6-7890-cdef-123456789012
{
  "price": 49,
  "inventory_count": 0,
  "in_stock": false
}
```

Response returns the full updated record with all attributes, including the unchanged ones.

## When to use this endpoint

* **Edit forms** — a user edits one or a few fields and saves.
* **Status updates** — flip a single boolean or enum field without touching anything else.
* **Partial enrichment** — backfill a specific attribute after you've gathered more data.


## OpenAPI

````yaml PATCH /crm/{objectSlug}/{recordId}
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}/{recordId}:
    patch:
      tags:
        - CRM - Records
      summary: Patch a CRM record
      description: >-
        Partially updates a CRM record. Only attributes included in the request
        body are changed — omitted attributes keep their current values.


        **Required scope:** `crm:write`
      operationId: patch-crm-record
      parameters:
        - name: objectSlug
          in: path
          required: true
          schema:
            type: string
          description: Slug of the custom CRM object.
          example: products
        - name: recordId
          in: path
          required: true
          schema:
            type: string
            format: uuid
          description: UUID of the record to update.
      requestBody:
        required: true
        content:
          application/json:
            schema:
              type: object
              additionalProperties: true
              description: Flat object of attribute slug → value pairs to update.
              example:
                price: 35
                inventory_count: 80
      responses:
        '200':
          description: OK
          content:
            application/json:
              schema:
                type: object
                properties:
                  success:
                    type: boolean
                    example: true
                  status:
                    type: integer
                    example: 200
                  record:
                    $ref: '#/components/schemas/CrmRecord'
        '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
        '404':
          description: Not Found
          content:
            application/json:
              schema:
                type: object
                properties:
                  success:
                    type: boolean
                  message:
                    type: string
                  status:
                    type: integer
        '422':
          $ref: '#/components/responses/422'
      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.
    '422':
      description: Unprocessable Entity
      content:
        application/json:
          schema:
            type: object
            properties:
              message:
                type: string
                example: The given data was invalid.
              errors:
                type: object
                additionalProperties:
                  type: array
                  items:
                    type: string
                example:
                  field_name:
                    - The field_name field is required.
  securitySchemes:
    bearer:
      type: http
      scheme: bearer
      description: ''

````