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

# Update a CRM Object

> Update a custom CRM object's display metadata via the Zeeg CRM API. Change its singular and plural names; the slug stays immutable

Partially updates a custom CRM object's display metadata. Only fields you include are changed — omitted fields retain their current values.

## What can and cannot be changed

| Field          | Updatable | Notes                        |
| -------------- | --------- | ---------------------------- |
| `singularName` | Yes       |                              |
| `pluralName`   | Yes       |                              |
| `slug`         | **No**    | Immutable after creation     |
| `isActive`     | No        | Not exposed on this endpoint |

Standard objects (`people`, `companies`) cannot be updated — the endpoint returns `403`.

To add or modify attributes, use `POST /crm/objects/{slug}/attributes` and `PATCH /crm/objects/{slug}/attributes/{attributeKey}`.


## OpenAPI

````yaml PATCH /crm/objects/{slug}
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/objects/{slug}:
    patch:
      tags:
        - CRM - Objects
      summary: Update a custom CRM object
      description: >-
        Partially updates a custom CRM object's metadata. Only the fields you
        provide are updated — omitted fields retain their current values.


        Standard objects (`people`, `companies`) cannot be updated.


        **Required scope:** `crm:write`
      operationId: patch-crm-object-by-slug
      parameters:
        - name: slug
          in: path
          required: true
          schema:
            type: string
            example: products
          description: The slug of the custom object to update.
      requestBody:
        required: true
        content:
          application/json:
            schema:
              type: object
              properties:
                singularName:
                  type: string
                  description: New singular display name.
                  example: Product
                  maxLength: 255
                pluralName:
                  type: string
                  description: New plural display name.
                  example: Products
                  maxLength: 255
      responses:
        '200':
          description: OK
          content:
            application/json:
              schema:
                type: object
                properties:
                  success:
                    type: boolean
                    example: true
                  status:
                    type: integer
                    example: 200
                  object:
                    $ref: '#/components/schemas/CrmObject'
              examples:
                Success:
                  value:
                    success: true
                    status: 200
                    object:
                      slug: products
                      singularName: Product
                      pluralName: Products
                      isStandard: false
                      isActive: true
                      attributes:
                        - key: title
                          label: Title
                          type: text
                          isRequired: true
                          isStandard: false
                      createdAt: '2025-06-01T10:00:00+00:00'
                      updatedAt: '2025-06-15T14:30:00+00:00'
        '401':
          $ref: '#/components/responses/401'
        '403':
          description: >-
            Forbidden — missing scope, CRM not enabled, or attempt to update a
            standard object
          content:
            application/json:
              schema:
                type: object
                properties:
                  success:
                    type: boolean
                  message:
                    type: string
                  status:
                    type: integer
              examples:
                Standard object:
                  value:
                    success: false
                    message: You don't have permission to update standard objects.
                    status: 403
        '404':
          description: Object 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:
    CrmObject:
      type: object
      description: A CRM object definition including its full attribute schema.
      required:
        - slug
        - singularName
        - pluralName
        - isStandard
        - isActive
        - attributes
        - createdAt
        - updatedAt
      properties:
        slug:
          type: string
          description: Unique identifier for the object. Used in all record API calls.
          example: people
        singularName:
          type: string
          description: Singular display name.
          example: Person
        pluralName:
          type: string
          description: Plural display name.
          example: People
        isStandard:
          type: boolean
          description: >-
            `true` for built-in objects (`people`, `companies`). `false` for
            custom objects.
          example: true
        isActive:
          type: boolean
          description: Whether the object is enabled in the workspace.
          example: true
        attributes:
          type: array
          description: Full list of attribute definitions for this object.
          items:
            $ref: '#/components/schemas/CrmAttribute'
        createdAt:
          type: string
          format: date-time
          example: '2025-01-15T09:00:00+00:00'
        updatedAt:
          type: string
          format: date-time
          example: '2025-06-01T12:00:00+00:00'
    CrmAttribute:
      type: object
      description: Definition of a single attribute on a CRM object.
      required:
        - key
        - label
        - type
        - isRequired
        - isStandard
        - isUnique
        - isArchived
        - createdAt
        - updatedAt
      properties:
        key:
          type: string
          description: Attribute key used when reading or writing record values.
          example: job_title
        label:
          type: string
          description: Human-readable label shown in the UI.
          example: Job Title
        type:
          type: string
          description: Attribute data type. Cannot be changed after creation.
          enum:
            - text
            - number
            - phone_number
            - date
            - datetime
            - checkbox
            - select
            - multiselect
            - rating
            - relation
            - status
            - user
            - currency
          example: text
        isRequired:
          type: boolean
          description: Whether a value is required when creating a record.
          example: false
        isStandard:
          type: boolean
          description: >-
            `true` for built-in attributes, `false` for custom attributes added
            by your workspace.
          example: false
        isUnique:
          type: boolean
          description: >-
            Whether values must be unique across all records. Applies to `text`,
            `phone`, and `number` types.
          example: false
        isArchived:
          type: boolean
          description: >-
            Whether the attribute is archived. Archived attributes are hidden
            from the UI but their data is preserved.
          example: false
        options:
          type: array
          description: >-
            Available options. Present only for `select`, `multiselect`, and
            `status` attributes.
          items:
            $ref: '#/components/schemas/CrmAttributeOption'
        relatedObjectSlug:
          type: string
          nullable: true
          description: >-
            Slug of the related object. Present only for `relation` attributes.
            Immutable after creation.
          example: companies
        relatedObjectLabel:
          type: string
          nullable: true
          description: >-
            Display label for the relation. Present only for `relation`
            attributes. Can be updated via PATCH.
          example: Company
        relationType:
          type: string
          nullable: true
          description: Cardinality of the relation. Present only for `relation` attributes.
          enum:
            - one_to_one
            - many_to_one
            - one_to_many
            - many_to_many
          example: many_to_one
        isMultipleSelection:
          type: boolean
          description: >-
            `true` when `relationType` is `one_to_many` or `many_to_many`.
            Present only for `relation` attributes.
          example: false
        currency:
          type: string
          nullable: true
          description: >-
            ISO 4217 currency code. Present only for `currency` attributes.
            Immutable after creation.
          example: EUR
        currencyDisplay:
          type: string
          nullable: true
          description: >-
            How the currency value is displayed. Present only for `currency`
            attributes.
          enum:
            - code
            - name
            - symbol
          example: symbol
        currencyDecimal:
          type: boolean
          nullable: true
          description: >-
            Whether decimal places are shown. Present only for `currency`
            attributes.
          example: true
        currencyGrouping:
          type: boolean
          nullable: true
          description: >-
            Whether a thousands separator is used. Present only for `currency`
            attributes.
          example: true
        createdAt:
          type: string
          format: date-time
          description: ISO 8601 timestamp when the attribute was created.
          example: '2025-06-01T10:00:00+00:00'
        updatedAt:
          type: string
          format: date-time
          description: ISO 8601 timestamp when the attribute was last updated.
          example: '2025-06-01T10:00:00+00:00'
    CrmAttributeOption:
      type: object
      description: >-
        A selectable option for a `select`, `multiselect`, or `status`
        attribute.
      required:
        - value
        - color
      properties:
        id:
          type: integer
          nullable: true
          description: >-
            Server-assigned option ID. Omit when adding a new option; include
            when updating an existing one to preserve it.
          example: 1
        value:
          type: string
          description: The option label shown in the UI and stored as the attribute value.
          example: Active
          maxLength: 512
        color:
          type: string
          description: >-
            Color name for the option. Allowed values: `gray`, `primary`,
            `warning`, `success`, `cyan`, `sky`, `violet`, `fuchsia`, `rose`,
            `blue`, `green`, `red`, `pink`, `black`, `yellow`, `orange`.
          example: success
  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: ''

````