# Home

Welcome to your team’s developer platform

{% columns %}
{% column width="41.66666666666667%" %}

<figure><picture><source srcset="/files/HiC2zm9f6yAucZLWn6ss" media="(prefers-color-scheme: dark)"><img src="/files/iq1suVf2BBh3QWMPr6Bv" alt=""></picture><figcaption></figcaption></figure>

## Power What's Possible with <mark style="color:$primary;">Kizen</mark>

Unify data and context through SmartConnectors, personalize complex workflows with custom code with LLM steps, orchestrate self-learning agents, and ship custom apps — all from one system.

<a href="/spaces/Qd8ufpN7wkdnx7JtgoeZ/pages/AH66y5wh0VFZKxey7A68" class="button primary">Start Building -></a>  <a href="/spaces/CreM2KCc3dXtXwkCH8rX" class="button secondary">Explore the APIs ></a>
{% endcolumn %}

{% column width="58.33333333333333%" %}

<div data-with-frame="true"><figure><picture><source srcset="/files/saPA6S6sPOnW1hbZbe4E" media="(prefers-color-scheme: dark)"><img src="/files/wDxxndT1CZ0VjuAzfv9Q" alt=""></picture><figcaption></figcaption></figure></div>
{% endcolumn %}
{% endcolumns %}

### Choose Your Path

<table data-view="cards"><thead><tr><th></th><th></th><th data-hidden data-card-target data-type="content-ref"></th><th data-hidden data-card-cover data-type="image">Cover image</th><th data-hidden data-type="image">Cover image (dark)</th><th data-hidden data-type="image">Cover image (dark)</th><th data-hidden data-card-cover-dark data-type="image">Cover image (dark)</th></tr></thead><tbody><tr><td><i class="fa-play">:play:</i>  <strong>Get Started</strong></td><td>New to Kizen? Start here with guides, tutorials, and key concepts.</td><td><a href="/spaces/Qd8ufpN7wkdnx7JtgoeZ/pages/PbYb0GukRhiS4qCHdRal">/spaces/Qd8ufpN7wkdnx7JtgoeZ/pages/PbYb0GukRhiS4qCHdRal</a></td><td><a href="/files/HMWeRzl8SfMmkQxvgcKf">/files/HMWeRzl8SfMmkQxvgcKf</a></td><td></td><td><a href="/files/Y368xQAz1kTHTspvPRLN">/files/Y368xQAz1kTHTspvPRLN</a></td><td><a href="/files/Y368xQAz1kTHTspvPRLN">/files/Y368xQAz1kTHTspvPRLN</a></td></tr><tr><td><i class="fa-bulldozer">:bulldozer:</i>  <strong>Build Integrations</strong></td><td>Connect Kizen with your stack using webhooks and APIs.</td><td><a href="/spaces/Qd8ufpN7wkdnx7JtgoeZ/pages/GMSt8SKGZgnlmlinriBF">/spaces/Qd8ufpN7wkdnx7JtgoeZ/pages/GMSt8SKGZgnlmlinriBF</a></td><td><a href="/files/LxA0Qv69p3LocZVcYMrJ">/files/LxA0Qv69p3LocZVcYMrJ</a></td><td></td><td></td><td><a href="/files/FePgcoxeHp4E4MXqizEX">/files/FePgcoxeHp4E4MXqizEX</a></td></tr><tr><td><i class="fa-robot">:robot:</i>  <strong>Automate with AI</strong></td><td>Orchestrate AI agents and Agentic Workflows with primitives.</td><td><a href="/spaces/CreM2KCc3dXtXwkCH8rX/pages/trLwwmumlaofzMKwR3fr">/spaces/CreM2KCc3dXtXwkCH8rX/pages/trLwwmumlaofzMKwR3fr</a></td><td><a href="/files/9P0vpzquahp9R5b0bHEd">/files/9P0vpzquahp9R5b0bHEd</a></td><td><a href="/files/4HMymBtlPAzlOGMGHDBe">/files/4HMymBtlPAzlOGMGHDBe</a></td><td><a href="/files/4HMymBtlPAzlOGMGHDBe">/files/4HMymBtlPAzlOGMGHDBe</a></td><td><a href="/files/4HMymBtlPAzlOGMGHDBe">/files/4HMymBtlPAzlOGMGHDBe</a></td></tr></tbody></table>

{% columns %}
{% column width="58.333333333333336%" %}

### Make Your First API Request

<div data-with-frame="true"><figure><picture><source srcset="/files/d6YDpAwh7reR0CAgqkUc" media="(prefers-color-scheme: dark)"><img src="/files/R4BKdc1NJMipktaqlNR8" alt=""></picture><figcaption></figcaption></figure></div>
{% endcolumn %}

{% column width="41.666666666666664%" %}

### What You Can Build

<div data-with-frame="true"><figure><picture><source srcset="/files/LCuwc3NwR3oJDR2Xzghs" media="(prefers-color-scheme: dark)"><img src="/files/BTkftruO6aDmm2tOiQUC" alt=""></picture><figcaption></figcaption></figure></div>
{% endcolumn %}
{% endcolumns %}

### One Platform. Multiple Ways to <mark style="color:$primary;">Extend</mark> It.

<div data-with-frame="true"><figure><picture><source srcset="/files/J9iM1OJD9PPCX48i58he" media="(prefers-color-scheme: dark)"><img src="/files/OSsQOYNzO87nkGbMJfbi" alt=""></picture><figcaption></figcaption></figure></div>


# Introduction

Kizen's Technical Documentation | APIs, Workflows, Automations, and Integrations

<code class="expression">space.vars.Kizen\_company\_name</code> is a leading AI platform for the future of work, redefining how people and AI seamlessly move and improve as one. Founded on the principle that technology should make work more meaningful, <code class="expression">space.vars.Kizen\_company\_name</code> creates AI systems and assistants that learn, adapt, and improve over time, just like the people who use them.\
\
Today, <code class="expression">space.vars.Kizen\_company\_name</code> powers millions of mission-critical experiences for leading organizations in highly regulated industries like insurance, healthcare, and financial services. We help companies realize the AI opportunity by delivering production-ready AI assistants for their teams. It molds to your unique business setup and keeps your teams in charge and performing at their best. The result: up to 4–8× productivity and climbing across regulated fields.

This site includes basic concept topics, tutorials, and walkthroughs of <code class="expression">space.vars.Kizen\_company\_name</code>'s platform, as well as more technical content such as API references and plugin documentation to help you get up and running quickly.

### What You Can Build with Kizen

<code class="expression">space.vars.Kizen\_company\_name</code> provides a flexible, event-driven architecture that lets you automate and extend your systems in powerful ways. Admins and Technical Builders commonly use <code class="expression">space.vars.Kizen\_company\_name</code> in different way&#x73;*.*

{% columns %}
{% column %}

#### **Admins**

* Configure API connections and credentials
* Manage data schemas, fields, and permissions
* Define workflow rules and operational logic
* Set up integrations with third-party systems
* Maintain business settings across industries
  {% endcolumn %}

{% column %}

#### **Technical Builders**

* Connect external systems using APIs, webhooks, and plugins
* Orchestrate AI-driven and multi-system workflows
* Query, transform, and sync data programmatically
* Enrich platform data using third-party services
* Build domain-specific <code class="expression">space.vars.automations</code> for insurance, healthcare, and financial services
  {% endcolumn %}
  {% endcolumns %}

Everything in <code class="expression">space.vars.Kizen\_company\_name</code> is connected. One update can power dozens of insights and <code class="expression">space.vars.automations</code> across your business. If your goal is to manage, integrate, automate, or customize your enterprise workflows, you've come to the right place!

### Jump Right In

<table data-view="cards"><thead><tr><th></th><th></th><th></th><th data-hidden data-card-cover data-type="files"></th><th data-hidden></th><th data-hidden data-card-target data-type="content-ref"></th></tr></thead><tbody><tr><td><h4><i class="fa-head-side-gear">:head-side-gear:</i></h4></td><td><strong>Kizen Basics</strong></td><td>Learn the core concepts behind how data, <code class="expression">space.vars.entities</code>, <code class="expression">space.vars.activities</code>, and <code class="expression">space.vars.automations</code> are structured in <code class="expression">space.vars.Kizen_company_name</code> with a fun walkthrough tutorial.</td><td></td><td></td><td><a href="/pages/PbYb0GukRhiS4qCHdRal">/pages/PbYb0GukRhiS4qCHdRal</a></td></tr><tr><td><h4><i class="fa-leaf">:leaf:</i></h4></td><td><strong>Concepts</strong></td><td>Dive deep to understand the core building blocks behind Kizen's Agentic OS capabilities, so you can extend them.</td><td></td><td></td><td><a href="/pages/aOjs4gC5WzIpifbjuGsn">/pages/aOjs4gC5WzIpifbjuGsn</a></td></tr><tr><td><h4><i class="fa-plug">:plug:</i></h4></td><td><strong>Integrations &#x26; Plugins</strong></td><td>Integrate your data, automate cross-system <code class="expression">space.vars.automations</code>, and add customer UI actions with <code class="expression">space.vars.Kizen_company_name</code>'s integration tools.</td><td></td><td></td><td><a href="/pages/GMSt8SKGZgnlmlinriBF">/pages/GMSt8SKGZgnlmlinriBF</a></td></tr></tbody></table>


# Intended Audience

The documentation on this site is intended to support a range of technical users:

* **Admins** configuring business settings, permissions, and platform behavior
* **Technical Builders** creating integrations, orchestrations, and extensions across enterprise systems
  * **Developers** building integrations, <code class="expression">space.vars.automations</code>, and plugins
  * **Technical Teams** orchestrating AI-driven workflows
  * **Solution Architects** connecting enterprise systems
  * **Platform Engineers** extending <code class="expression">space.vars.Kizen\_company\_name</code> across complex environments
  * **Implementers** creating specialized industry flows (insurance, healthcare, and financial services)

If you work with APIs, <code class="expression">space.vars.automations</code>, system integrations or just need to understand how <code class="expression">space.vars.Kizen\_company\_name</code> works, this is your home base!

### Industry-Specific Use Cases

<code class="expression">space.vars.Kizen\_company\_name</code> supports a wide range of industry workflows. The use cases below show how insurance, healthcare, and financial services teams leverage <code class="expression">space.vars.automations</code>, integrations, and data orchestration to power their core processes.

{% tabs %}
{% tab title="Insurance" %}

### Insurance

#### **Admins**

* Configure agent permissions, compliance rules, and required enrollment fields
* Set up business settings for quoting, enrollment, and multi-carrier workflows

#### **Technical Builders (Developers, Architects, Implementers)**

* Build integrations with quoting and enrollment platforms (SunFire, Connecture, carrier APIs)
* Automate end-to-end insurance workflows such as plan comparisons, eligibility checks, and renewals
* Sync agent, member, and policy data across external systems
* Create custom plugins for lead routing, quoting tools, or compliance logic
  {% endtab %}

{% tab title="Healthcare" %}

### **Healthcare**

#### **Admins**

* Manage provider permissions, data-sharing rules, user roles, and HIPAA-aligned configurations
* Set up scheduling preferences, intake settings, and clinic-level workflows

#### **Technical Builders (Developers, Architects, Implementers)**

* Integrate EHR/EMR systems (Epic, Cerner, Athena) with operational workflows
* Automate patient journeys such as referrals, prior auth requests, and clinical follow-ups
* Sync clinical and operational data from HL7/FHIR endpoints
* Build plugins for data validation, scheduling logic, or care management tools
  {% endtab %}

{% tab title="Financial Services" %}

### **Financial Services**

#### **Admins**

* Configure compliance rules, approval flows, and access permissions
* Set up business logic for onboarding, transactions, underwriting, or servicing

#### **Technical Builders (Developers, Architects, Implementers)**

* Connect CRMs, loan origination systems, underwriting engines, and servicing platforms
* Automate workflows like KYC/AML checks, risk evaluation, onboarding, and transaction processing
* Sync customer and financial data across internal and external systems
* Customize <code class="expression">space.vars.Kizen\_company\_name</code> with plugins for verification, payment flows, document extraction, or reporting
  {% endtab %}
  {% endtabs %}

<details>

<summary>Related Topics</summary>

* [Introduction](/docs)
* [Contributing to Kizen Docs](/docs/readme/contributing-to-kizen-docs)
* [Submitting Documentation Updates](/docs/readme/contributing-to-kizen-docs/submitting-documentation-updates)
* [Pull Request Review and Publishing Process](/docs/readme/contributing-to-kizen-docs/pull-request-review-and-publishing-process)

</details>


# Contributing to Kizen Docs

Learn how to contribute to Kizen’s open-source documentation on GitHub, including what you can update and how to submit improvements.

<code class="expression">space.vars.Kizen\_company\_name</code> maintains a portion of its more technical documentation in open-source GitHub repositories. This allows our technical builders such as developers, partners, and the broader <code class="expression">space.vars.Kizen\_company\_name</code> community to improve accuracy, expand examples, and keep documentation aligned with real-world usage.

Not all documentation is open-sourced; some internal or business-specific content remains private to ensure security, compliance, and platform integrity. However, when a page on our documentation site includes the **Edit on GitHub** link, that means you can contribute directly.

This guide explains how to submit updates, corrections, or additions to any open-source <code class="expression">space.vars.Kizen\_company\_name</code> documentation.

***

### What You Can Contribute

You can contribute to any documentation that:

* Includes an **Edit on GitHub** link
* Lives in a public <code class="expression">space.vars.Kizen\_company\_name</code> GitHub repo
* Is not part of restricted or internal <code class="expression">space.vars.Kizen\_company\_name</code> content

Typical contributions include:

* Fixing typos or formatting issues
* Adding missing details or clarifying confusing sections
* Contributing new examples or best practices
* Updating code samples to reflect current API behavior
* Improving accuracy for plugin or integration guides

<details>

<summary>Related Topics</summary>

* [Introduction](/docs)
* [Intended Audience](/docs/readme/intended-audience)
* [Submitting Documentation Updates](/docs/readme/contributing-to-kizen-docs/submitting-documentation-updates)
* [Pull Request Review and Publishing Process](/docs/readme/contributing-to-kizen-docs/pull-request-review-and-publishing-process)

</details>


# Submitting Documentation Updates

Step-by-step guide to contributing documentation updates using GitHub, from editing files to opening a pull request.

Follow these steps to contribute to any open-source <code class="expression">space.vars.Kizen\_company\_name</code> docs.

{% stepper %}
{% step %}

#### Open the documentation page

* Go to the <kbd>developer.kizen.com</kbd> page you want to improve.
* Click **Edit on GitHub**.
  {% endstep %}

{% step %}

#### Fork the repository

* On GitHub, select **Fork**.

{% hint style="info" %}
**Note:** Forking the repository creates your own copy to edit.
{% endhint %}
{% endstep %}

{% step %}

#### Create a new branch

In your fork, type the following into your CLI:

```bash
git checkout -b update-docs-[short-description]
```

{% hint style="success" %}
**Example:** <kbd>update-docs-fix-webhook-example</kbd>
{% endhint %}
{% endstep %}

{% step %}

#### Make your changes

* Edit the Markdown file GitHub opened. Make sure to keep the change focused and match existing formatting, tone, and style.
  {% endstep %}

{% step %}

#### Commit your update

Use a clear commit message, for example:

```bash
git commit -m "Clarified webhook payload example and fixed query parameters"
```

{% endstep %}

{% step %}

#### Push your branch

```bash
git push origin update-docs-[short-description]
```

{% endstep %}

{% step %}

#### Open a Pull Request

In GitHub, select **Compare & Pull Request**.

Add a short summary to explain why the change is needed, and provide a link to the doc page.

{% hint style="info" %}
**Note:** If you changed formatting on the page, please include before/after screenshots.
{% endhint %}
{% endstep %}
{% endstepper %}

Once submitted, the PR enters <code class="expression">space.vars.Kizen\_company\_name</code>’s review workflow.

<details>

<summary>Related Topics</summary>

* [Introduction](/docs)
* [Intended Audience](/docs/readme/intended-audience)
* [Contributing to Kizen Docs](/docs/readme/contributing-to-kizen-docs)
* [Pull Request Review and Publishing Process](/docs/readme/contributing-to-kizen-docs/pull-request-review-and-publishing-process)

</details>


# Pull Request Review and Publishing Process

Learn what happens after you submit a documentation pull request, including review, approval, merge, and automatic publishing to the documentation site.

Here is what happens after you submit a PR:

* <code class="expression">space.vars.Kizen\_company\_name</code>’s documentation maintainers review your changes
* They may request revisions or ask follow-up questions
* Once approved, your contributions will be merged
* Within minutes, your update will be published.

You will receive a GitHub notification when the PR is merged.

{% hint style="warning" %}
**Caution:** Not all documentation is open sourced. Pages without an Edit on GitHub link are maintained internally and cannot be edited through GitHub contributions. If you want to propose updates to non-open-source docs, you can submit feedback using the suggestions link on the page or report it through <code class="expression">space.vars.Kizen\_company\_name</code>'s support.
{% endhint %}

### 🙌 Thank You for Contributing

Community contributions help keep our documentation accurate, helpful, and aligned with real developer needs.


# Where To Get Help

Troubleshoot Kizen issues fast. Access developer docs, API references, support resources, and contact the Kizen support team for expert help.

The following resources are available if you encounter issues while building with <code class="expression">space.vars.Kizen\_company\_name</code>.

### Helpful Resources

* [ ] [Kizen Support Portal](https://support.kizen.com/support/home): Help articles and troubleshooting for using the <code class="expression">space.vars.Kizen\_company\_name</code> platform.
* [ ] [Kizen Interactive API Reference](https://app.go.kizen.com/api/docs/public/swagger): An interactive API reference that allows developers to explore <code class="expression">space.vars.Kizen\_company\_name</code> endpoints, view request/response schemas, and test API calls directly in the browser.
* [ ] GitBook Assistant: An AI-powered chat available on every page of <code class="expression">space.vars.Kizen\_company\_name</code>'s TechDocs that allows users to explore documentation, get answers to questions, and navigate to relevant content.

***

## Contact Kizen Support

If you still need help, contact us by [submitting a ticket](https://support.kizen.com/support/tickets/new) or reaching out via email at [<mark style="color:$success;">**support@kizen.com**</mark>](mailto:support@kizen.com).&#x20;

When reaching out, include the following information (if able) to help us troubleshoot effectively and quickly:

* **Clear description of the issue:** What is happening and what you expected to happen instead.
* **Steps to reproduce the problem:** The actions taken before the issue occurred.
* **Relevant Object or Record IDs:** IDs for <code class="expression">space.vars.objects</code>, <code class="expression">space.vars.entities</code>, <code class="expression">space.vars.activities</code>, or <code class="expression">space.vars.workflows</code> involved in the issue (if applicable).
* **API request details:** Endpoint used, request body, headers, and any error responses (if applicable).
* **Screenshots:** Visual evidence of the problem when possible.

Providing these details allows us to reproduce and diagnose the issue more efficiently.


# What is Kizen?

Learn what Kizen is, how it structures data, Agentic Workflows, and Activities, and how these components work together across the platform.

## Overview

<code class="expression">space.vars.Kizen\_company\_name</code> is an Agentic OS built for you to take control of your data and coordinate all the moving parts of your business. It's like a conductor for your entire tech stack that ensures every system knows its role and performs in harmony without chaos or conflict.&#x20;

Most <code class="expression">space.vars.Kizen\_company\_name</code> users start by creating <code class="expression">space.vars.objects</code>, logging <code class="expression">space.vars.activities</code>, and setting up simple <code class="expression">space.vars.workflows</code>. Over time, your teams can add <code class="expression">space.vars.automations</code>, custom reporting, and integrations to support larger and more complex processes.&#x20;

The goal is the same for every business: make work easier, faster, and more consistent.

<code class="expression">space.vars.Kizen\_company\_name</code> is an Orchestration System built for the Agentic Era—a new phase of technology where AI systems don't just provide answers—they take action to help enterprises better understand their business, automate actions with AI-powered <code class="expression">space.vars.workflows</code>, and safely build custom applications at scale.&#x20;

<code class="expression">space.vars.Kizen\_company\_name</code> speeds up engineering and drives real business value with ready-to-use industry solutions and a platform that lets teams turn prototypes into production quickly and confidently. With built-in compliance standards like SOC 2, ISO 27001, and HIPAA, <code class="expression">space.vars.Kizen\_company\_name</code> gives you the speed, clarity, and control you need to deploy <code class="expression">space.vars.automation</code> and AI safely at scale.

### **What You Can Do In Kizen**

<code class="expression">space.vars.Kizen\_company\_name</code> brings your data and operations into one unified place. Common tasks include:

* Organizing information using <code class="expression">space.vars.objects</code> and <code class="expression">space.vars.entities</code>
* Tracking interactions through <code class="expression">space.vars.activities</code> and <code class="expression">space.vars.timelines</code>
* Creating <code class="expression">space.vars.workflows</code> to guide your process from step to step
* Automating tasks like sending messages, assigning work, or updating <code class="expression">space.vars.entities</code>
* Building dashboards to view trends and performance on charts
* Customizing the platform with integrations, plugins, and APIs

Each feature builds on the other. By the end of the <code class="expression">space.vars.Kizen\_company\_name</code> Basics, you’ll have created your own <code class="expression">space.vars.objects</code>, <code class="expression">space.vars.entities</code>, <code class="expression">space.vars.workflows</code>, and <code class="expression">space.vars.automations</code> using an example business.

### **Why Kizen Matters**

Every business runs on processes. The more systems, steps, and people involved, the harder it is to keep everything consistent, accurate, and traceable.

<code class="expression">space.vars.Kizen\_company\_name</code> solves this by giving teams and enterprises:

* One system for data and history
* Guided workflows that reduce confusion
* <code class="expression">space.vars.automations</code> that handle repetitive tasks
* Integrations that connect your other tools
* Reporting highlights performance and issues.

Instead of switching between apps, or losing work in email threads, <code class="expression">space.vars.Kizen\_company\_name</code> creates a unified single source of truth for your operations.

***

## **Who This Is For**

<code class="expression">space.vars.Kizen\_company\_name</code> supports multiple user roles. However, for this purposes of this documentation we are focused only on the following:

{% columns %}
{% column %}

#### **Admins**

Admins configure the system, create data structures, customize fields, manage permissions, and set up <code class="expression">space.vars.workflows</code> or <code class="expression">space.vars.automations</code>.
{% endcolumn %}

{% column %}

#### **Technical Builders**

Technical builders like developers, implementors, and solution architects can use <code class="expression">space.vars.Kizen\_company\_name</code>’s APIs, webhooks, and integration tools to connect external systems, move data between platforms, and automate complex processes.
{% endcolumn %}
{% endcolumns %}

If you’re a technical builder and you already understand the <code class="expression">space.vars.Kizen\_company\_name</code> Basics, you can skip ahead in the tutorial at any time to learn more about the more technical concepts such as:

* [Building With APIs](/docs/developers/building-with-apis)
* [Generating API Credentials](/docs/developers/building-with-apis/generating-api-credentials)
* [Creating Your First API Call](/docs/developers/building-with-apis/creating-your-first-api-call)

***

## **What’s Next?**

Next, we’ll explore [How Kizen is Structured](/docs/kizen-basics/how-is-kizen-structured), including:

* <code class="expression">space.vars.objects</code> and <code class="expression">space.vars.entities</code>
* <code class="expression">space.vars.activities</code> & <code class="expression">space.vars.timelines</code>
* <code class="expression">space.vars.automations</code>
* <code class="expression">space.vars.dashboard</code> views & Charts
* Settings & App Marketplace

Understanding these components early will make building your first <code class="expression">space.vars.workflows</code> and <code class="expression">space.vars.automations</code> much easier.

Developers that already understand the basics may skip ahead to the API topics in the dropdown below. Otherwise, continue to [How is Kizen Structured](/docs/kizen-basics/how-is-kizen-structured).

<details>

<summary>Developer Topics</summary>

* [Building With APIs](/docs/developers/building-with-apis)
* [Generating API Credentials](/docs/developers/building-with-apis/generating-api-credentials)
* [Creating Your First API Call ](/docs/developers/building-with-apis/creating-your-first-api-call)

</details>


# How is Kizen Structured?

Understand how Kizen is structured, including its core components and how data, Agentic Workflows, and Activities work together across the platform.

## Overview

Understanding how <code class="expression">space.vars.Kizen\_company\_name</code> organizes and connects your data is the foundation for everything you build in the platform. For Admins and Technical builders, these building blocks make it easier to understand the platform, tailor your setup, and build workflows that make sense.

This topic walks through the key concepts, how they work together, and why they’re important to understand before you start hands-on setup.

### **Core Concepts In** <code class="expression">space.vars.Kizen\_company\_name</code>

<table><thead><tr><th width="155.93359375">Concept</th><th>What It Is</th><th>How It Works</th><th>API</th></tr></thead><tbody><tr><td><a href="/pages/4qGNBmqyMwpbTrzVxa5A">Object</a></td><td>It's like a container or a table of data that stores grouped information (such as Guests, Tickets, Staff, or Equipment).</td><td>Provides the structure for your data. <code class="expression">space.vars.automations</code> and <code class="expression">space.vars.workflows</code> reference <code class="expression">space.vars.objects</code> to read, update, or create information.</td><td>Use the <a href="/pages/7LOKbYiimh48HDCKoLf4">Object endpoints</a> to create, describe, and manage <code class="expression">space.vars.objects</code>. <code class="expression">space.vars.object</code> IDs from these endpoints are required when working with <code class="expression">space.vars.entities</code>, filters, and <code class="expression">space.vars.automations</code>.</td></tr><tr><td><a href="/pages/0DyuKRuLvwyGKofOOxcN">Record</a></td><td>A single entry inside an <code class="expression">space.vars.object</code> (one guest, one ticket, one staff member, or one piece of equipment).</td><td>Holds the detailed information used by <code class="expression">space.vars.workflows</code>, charts, or <code class="expression">space.vars.dashboards</code>, and <code class="expression">space.vars.activities</code>. Most <code class="expression">space.vars.automation</code> logic ties back to specific <code class="expression">space.vars.entities</code>.</td><td>Use the <a href="/pages/Z8QhtksWkEpNcMiEf5xi">Records endpoints</a> to create, read, update, delete, and query <code class="expression">space.vars.entities</code> for a specific <code class="expression">space.vars.object</code>. Most endpoints accept <code class="expression">space.vars.object</code> identifiers plus filters, pagination parameters, and sorting options.</td></tr><tr><td><a href="/pages/doFOO2kMTGSp6AVc5may">Activities</a></td><td>Past Interactions or tasks logged to a <code class="expression">space.vars.entity</code> (calls, notes, updates, assignments).</td><td>Build history on a <code class="expression">space.vars.entity</code> and can trigger <code class="expression">space.vars.automations</code> or appear in <code class="expression">space.vars.dashboards</code> and <code class="expression">space.vars.timelines</code>.</td><td>Use the <a href="/pages/KPuP1nmDqHPgktEJkOCt">Activities endpoints</a> to create and fetch <code class="expression">space.vars.activities</code> tied to a <code class="expression">space.vars.entity</code>. Payloads typically include a <code class="expression">space.vars.entity</code> ID (or related <code class="expression">space.vars.object</code>/<code class="expression">space.vars.entity</code> reference) plus activity type, timestamp, and metadata.</td></tr><tr><td><a href="/pages/ym0ClLF9SGmtEOvHNsvA#scheduled-vs.-logged-activities">Scheduled Activities</a></td><td>Future <code class="expression">space.vars.activities</code> with a due date or time, such as appointments, reminders, or tasks.</td><td>Drive time-based <code class="expression">space.vars.workflows</code>, reminders, calendar <code class="expression">space.vars.automations</code>, and simple to-do lists that help users manage their daily work.</td><td>Use the <a href="/pages/KPuP1nmDqHPgktEJkOCt">Activities endpoints</a> with scheduling fields (start/due time, status). These can be combined with <code class="expression">space.vars.automations</code> endpoints or webhooks to react when a Scheduled <code class="expression">space.vars.activity</code> is created, updated, or completed.</td></tr><tr><td><a href="/pages/ym0ClLF9SGmtEOvHNsvA#timelines">Timelines</a></td><td>A chronological history of all interactions and <code class="expression">space.vars.activities</code> linked to a <code class="expression">space.vars.entity</code>. These can include Scheduled <code class="expression">space.vars.activities</code>.</td><td>Provide context for users and <code class="expression">space.vars.automations</code>, showing everything that has happened or will happen with that <code class="expression">space.vars.entity</code> in one place.</td><td>N/A</td></tr><tr><td><a href="/pages/ccTozjzRM3TDF6c3aICW">Agentic Workflows</a></td><td>Event-driven rules that move data and trigger actions, such as creating a follow-up task and sending a confirmation email when a <code class="expression">space.vars.contact</code> form is submitted.</td><td>Connect <code class="expression">space.vars.objects</code>, <code class="expression">space.vars.entities</code>, <code class="expression">space.vars.activities</code>, and external systems. Ensure processes run consistently and without manual effort.</td><td>Use <code class="expression">space.vars.Kizen_company_name</code>'s <strong>webhook framework</strong> to trigger <code class="expression">space.vars.automations</code> based on events in your external systems. You can configure these webhooks to send structured payloads to <code class="expression">space.vars.Kizen_company_name</code>, which then starts the appropriate <code class="expression">space.vars.workflow</code>.</td></tr><tr><td><code class="expression">space.vars.dashboards</code> &#x26; Charts</td><td>Charts that show trends, performance, and operational insights.</td><td>Pull data from <code class="expression">space.vars.objects</code>, <code class="expression">space.vars.entities</code>, <code class="expression">space.vars.activities</code>, and <code class="expression">space.vars.automations</code> to help teams monitor outcomes and make decisions.</td><td>N/A</td></tr></tbody></table>

These components form a complete system for collecting data, managing work, and automating processes across your business.

***

## **Why Understanding This Structure Matters**

Before you begin building, it’s important to understand how these concepts shape your environment:

* Each component affects how data is stored, accessed, and used
* Clear structure reduces confusion and prevents rework as your business scales
* Different users interact with these components in different ways

{% columns %}
{% column %}

#### **Admins**

Admins configure <code class="expression">space.vars.objects</code>, fields, <code class="expression">space.vars.workflows</code>, views, and permissions.
{% endcolumn %}

{% column %}

#### **Technical Builders**

Technical Builders like developers, implementors, and solution architects extend functionality through APIs, integrations, and Marketplace tools.
{% endcolumn %}
{% endcolumns %}

A shared understanding of these building blocks ensures teams work from the same mental model.

***

## **What’s Next?**

Move into a guided walkthrough that shows how data, <code class="expression">space.vars.objects</code>, <code class="expression">space.vars.workflows</code>, and <code class="expression">space.vars.dashboards</code> work together in a real scenario. This example will help you see [Kizen Basics in Action](/docs/kizen-basics/kizen-in-action) and connect these concepts before you begin building in your own Business workspace.

<details>

<summary>Related Topics</summary>

* [What is Kizen?](/docs/kizen-basics/what-is-kizen)
* [Kizen Basics in Action](/docs/kizen-basics/kizen-in-action)
* [Building with APIs](/docs/developers/building-with-apis)
* [Where to Find Help](/docs/readme/where-to-find-help)

</details>


# Kizen Basics in Action

See how Kizen works in practice through guided walkthroughs that show how data, Activities, and Agentic Workflows come together.

## **Welcome to Flywheel Adventure Park**

<code class="expression">space.vars.Theme\_park\_name</code> is the example business we use to demonstrate how the <code class="expression">space.vars.Kizen\_company\_name</code> platform works in a real-world setting. Instead of learning features in isolation, you’ll follow how a single business uses <code class="expression">space.vars.Kizen\_company\_name</code> to connect data, manage interactions, automate operations, and support every part of its workflow.

To make the concepts concrete, you’ll track the experience of the Reyes family, a typical family visiting the park:

* **Marcus**, who plans the trip and books the tickets
* **Elena**, who manages family schedules and communicates with the park
* **Sofia (age 12)**, who needs a waiver for rides
* **Caleb (age 8)**, who signs up for park activities

As they move through the park’s online booking, entry, activities, purchases, and follow-up surveys, you’ll see exactly how <code class="expression">space.vars.Theme\_park\_name</code> uses <code class="expression">space.vars.Kizen\_company\_name</code> to support its day-to-day operations.

<code class="expression">space.vars.Theme\_park\_name</code> is a classic amusement park filled with roller coasters, spinning rides, carnival games, concession stands, and long summer lines. Each day, the team handles ticketing, guest requests, operations, lost items, food sales, and ongoing guest communication. This use case gives you a practical, end-to-end view of how <code class="expression">space.vars.Kizen\_company\_name</code> ties everything together so you can begin building your own <code class="expression">space.vars.workflows</code>, data structures, and <code class="expression">space.vars.automations</code>.

Use this walkthrough as your starting point for learning the <code class="expression">space.vars.Kizen\_company\_name</code> Basics: how it works, how data connects, and how you can bring all your operations into one intelligent, adaptable platform.

***

## What's Next?

Start by reviewing the [prerequisites](/docs/kizen-basics/kizen-in-action/prerequisites-or-kizen-in-action) required to complete the <code class="expression">space.vars.Kizen\_company\_name</code> Basics in Action walkthroughs.


# Prerequisites | Kizen Basics

Review the prerequisites required to complete the Kizen in Action walkthroughs, including account access and permissions.

## Overview

This page outlines the prerequisites required to complete the <code class="expression">space.vars.Kizen\_company\_name</code> Basics in Action walkthroughs. It explains the access, permissions, and environment setup you need before getting started so you can follow each example without interruption. Reviewing these requirements ahead of time helps ensure a smooth walkthrough experience as you move through the platform.

### Why This Matters

Confirming these prerequisites before starting helps prevent interruptions during the walkthrough. The examples in this guide require specific permissions and access to a Business workspace where you can safely create <code class="expression">space.vars.objects</code>, <code class="expression">space.vars.activities</code>, and <code class="expression">space.vars.automations</code>.

Reviewing these requirements ensures that you:

* Have the correct permissions to complete each step
* Can create and modify data structures used in the examples
* Work in a safe environment that does not affect production data
* Move through the walkthrough without needing to stop for access changes

Preparing your environment ahead of time allows you to focus on learning how the platform works rather than troubleshooting setup issues.

***

## Before You Begin

Before beginning the <code class="expression">space.vars.Theme\_park\_name</code> walkthrough, you **do not need prior experience** with <code class="expression">space.vars.Kizen\_company\_name</code>. However, you must have the following:

* **A Kizen Account:** You’ll need access to your <code class="expression">space.vars.Kizen\_company\_name</code> [environment](https://go.kizen.com) so you can follow along and complete each step in the example.
* **Admin Permissions:** Ensure you are and administrator and have permission to:
  * View & Create <code class="expression">space.vars.objects</code>
  * Create or Modify <code class="expression">space.vars.activities</code>
  * Build <code class="expression">space.vars.automations</code>
  * Create a business workspace
  * Access business settings

{% hint style="info" %}
**Note:** If you don't have the correct permissions, ask your <code class="expression">space.vars.Kizen\_company\_name</code> admin to update your role.
{% endhint %}

* **A Test or Sandbox Workspace&#x20;**<mark style="color:$success;">**(Recommended)**</mark>**:** This walkthrough uses a fictional business called <code class="expression">space.vars.Theme\_park\_name</code>. Using a test or sandbox workspace prevents changes from affecting your production data.

{% hint style="info" %}
**Note:** Sandbox environments can be set up by your organizations IT team.&#x20;
{% endhint %}

* **Basic Understanding Of Your Own Business Data:**  Understanding your data helps you apply core concepts to real business scenarios. Consider the <code class="expression">space.vars.entities</code> you manage, the interactions you track, and the <code class="expression">space.vars.workflows</code> that drive your operations.
* **Time to Follow the Walkthrough:** Plan for at least 90 minutes to complete the full example.

***

## What's Next?

Now that you have the right permissions, a test workspace, and the required setup, you’re ready to log in for the first time.

Continue to [**Logging In and Navigating the Platform**](/docs/kizen-basics/kizen-in-action/logging-in-and-navigating-the-platform-or-kizen-in-action) to learn how to sign in, explore the main navigation, and understand where core features like Data, <code class="expression">space.vars.automation</code>s, Dashboards, and Settings live.


# Log In and Navigate the Platform | Kizen Basics

Learn how to log in to Kizen and navigate the platform, including Dashboards, data, Agentic Workflows, and Settings.

## **Overview**

{% hint style="warning" %}
**Caution:** This setup reflects Kizen's default configuration. Your administrator may have customized your layout, so columns or navigation may appear differently. Trial accounts may have limited features.
{% endhint %}

This page introduces how to log into <code class="expression">space.vars.Kizen\_company\_name</code> and navigate the platform. It explains how to access your account, move through the primary navigation, and locate key areas such as <code class="expression">space.vars.contacts</code>, Data, Platform Tools, <code class="expression">space.vars.activities</code>, and Settings. Reviewing this walkthrough will help you understand how the main areas of the interface fit together before you begin creating and managing data within your Business.

### Why This Matters

Understanding how to log in and navigate the platform helps you locate the tools you’ll use throughout this guide. The main navigation provides access to your data, <code class="expression">space.vars.workflows</code>, <code class="expression">space.vars.dashboards</code>, and system configuration.

Knowing where these areas live allows you to:

* Quickly access the parts of the platform used to manage your data
* Locate tools for building <code class="expression">space.vars.workflows</code>, <code class="expression">space.vars.dashboards</code>, and integrations
* Understand where to configure settings and permissions
* Move efficiently between different parts of the platform as you build

Familiarity with the navigation makes it easier to follow the remaining walkthroughs and complete tasks without getting lost in the interface.

***

## **Before You Begin**

Before logging into <code class="expression">space.vars.Kizen\_company\_name</code> and navigating the platform, you must have the following:

* Your <code class="expression">space.vars.Kizen\_company\_name</code> [login URL](https://go.kizen.com)
* Your email and password
* A supported web browser
* Permissions for your role (Admin or Technical Builder permissions)

***

{% stepper %}
{% step %}

#### In your browser, navigate to <code class="expression">space.vars.Kizen\_company\_name</code> using your [Login URL](https://go.kizen.com)

<div data-with-frame="true"><figure><img src="/files/8xZoGNA01UTVuuu8MuwC" alt="Image of the Kizen Login page" width="375"><figcaption></figcaption></figure></div>
{% endstep %}

{% step %}

#### Enter your email address and select **CONTINUE**

<div data-with-frame="true"><figure><img src="/files/HRrbgkH2OoYkNddDtMy7" alt="" width="348"><figcaption></figcaption></figure></div>
{% endstep %}

{% step %}

#### Choose your login method

You can select **Login with Kizen Password**, or you can use your SSO to log in.

<div data-with-frame="true"><figure><img src="/files/VNVYFOrVQ2nGH5KSmkv4" alt="" width="340"><figcaption></figcaption></figure></div>
{% endstep %}

{% step %}

#### Select **LOGIN**

{% hint style="info" %}
**Note:** If you cannot log in due to incorrect password, select **Need Help Logging in?** to reset it.
{% endhint %}
{% endstep %}
{% endstepper %}

After you sign in, <code class="expression">space.vars.Kizen\_company\_name</code> opens your home view or <code class="expression">space.vars.dashboard</code> based on your role and workspace configuration.

***

## **Exploring the Main Navigation**

The main navigation gives you access to <code class="expression">space.vars.Kizen\_company\_name</code>’s core features. These options appear at the top of the platform.

<div data-with-frame="true"><figure><img src="/files/3c6u7YQWnpeq0Vo0L2TI" alt=""><figcaption></figcaption></figure></div>

Below is an overview of each Navigation menu you may see when you log in. What you see depends on your permissions and how you have set up and customized your top navigation menu.

{% tabs %}
{% tab title="Dashboard " %}

### <code class="expression">space.vars.dashboard</code>

The <code class="expression">space.vars.dashboard</code> gives you a real-time chart view of your work with key metrics and important activity across <code class="expression">space.vars.Kizen\_company\_name</code>. You can use <code class="expression">space.vars.dashboards</code> to create and view charts that monitor performance, track progress toward goals, and quickly access the information that matters most to your role.

You can use the <code class="expression">space.vars.dashboard</code> to also see assigned tasks or metrics because <code class="expression">space.vars.dashboards</code> will display from your <code class="expression">space.vars.contacts</code>, <code class="expression">space.vars.objects</code>, <code class="expression">space.vars.activities</code>, <code class="expression">space.vars.automations</code>, and other parts of the platform. Each widget updates automatically based on the latest data in your environment.

#### **What You Can Do On The Dashboard**

1. View key metrics and performance indicators though charts
2. Place a table of <code class="expression">space.vars.entities</code> so you can drill into your data
3. Place a Scheduled <code class="expression">space.vars.activities</code> dashlet to track your tasks and upcoming work
4. Customize your view based on the kinds of charts and data you want to display
5. Monitor <code class="expression">space.vars.automation</code> outcomes

***

#### **Common Dashboard Examples**

The <code class="expression">space.vars.dashboard</code>s and charts you see depend on your business setup. A few common examples include:

* **Agent or Sales Dashboard:** contains charts with upcoming tasks, lead pipelines, <code class="expression">space.vars.contact</code> engagement
* **Healthcare Dashboard:** contains charts with new patients, active cases, recent activities, follow-up schedules
* **Insurance Dashboard:** contains charts with quotes, enrollments, active policies, commissions progress
* **Financial Services Dashboard:** contains charts with client portfolio summaries, account activity, open opportunities
  {% endtab %}

{% tab title="Data" %}

### **Data**

The **Data** menu gives you access to your core records and data tools in <code class="expression">space.vars.Kizen\_company\_name</code>. It includes <code class="expression">space.vars.contacts</code>s, <code class="expression">space.vars.object</code>s, and <code class="expression">space.vars.smartconnector</code>s. Opening the **Data** menu allows you to view and manage the data you work with.

#### <code class="expression">space.vars.contacts</code>

[Contacts](/docs/concepts/objects/contacts) is where you can store all of your <code class="expression">space.vars.contacts</code> <code class="expression">space.vars.entities</code>. You can create new <code class="expression">space.vars.contacts</code>, update existing ones, upload or export <code class="expression">space.vars.contacts</code> using CSV files, and perform bulk actions such as sending mass emails or SMS messages. <code class="expression">space.vars.contacts</code>s serve as the foundation for most <code class="expression">space.vars.workflows</code> and <code class="expression">space.vars.automations</code>.

#### **Objects**

[Objects](/docs/concepts/objects) let you create data structures tailored to your business. You can define objects for anything you need to track, such as companies, assets, policies, patients, equipment, events, or financial accounts. Each object has its own fields, <code class="expression">space.vars.entities</code>, relationships, and <code class="expression">space.vars.automations</code>.

#### <code class="expression">space.vars.smartconnector</code>s

<code class="expression">space.vars.smartconnector</code>s are <code class="expression">space.vars.Kizen\_company\_name</code>’s built-in ETL tools for importing, transforming, and loading data from external systems. You can use <code class="expression">space.vars.smartconnector</code>s to create repeatable data pipelines, standardize files, run SQL-based transformations, validate data, and populate one or more objects in bulk. <code class="expression">space.vars.smartconnector</code>s are ideal for scheduled feeds, large datasets, or complex imports that require cleanup before entering <code class="expression">space.vars.Kizen\_company\_name</code>.
{% endtab %}

{% tab title="Platform" %}

### **Platform**

The **Platform** tab gives you access to tools that help you communicate with your audience, collect data, manage engagement, and customize <code class="expression">space.vars.Kizen\_company\_name</code>’s capabilities. These features support daily operations across marketing, sales, service, and data collection.

#### **Broadcasts**

Send mass emails or SMS messages to targeted groups of <code class="expression">space.vars.contacts</code>s. Use Broadcasts to share announcements, campaigns, reminders, or updates. You can segment your audience, schedule messages, and track engagement.

#### **Forms**

Create web forms to capture information from leads, customers, or internal teams. Form submissions automatically create or update records in <code class="expression">space.vars.Kizen\_company\_name</code>, making this ideal for intake workflows, lead capture, event registrations, or service requests.

#### <code class="expression">space.vars.activities</code>

View and manage <code class="expression">space.vars.activities</code> created across the platform. This includes calls, tasks, notes, messages, and any interaction logged against an <code class="expression">space.vars.entity</code>. From here you can create new <code class="expression">space.vars.activities</code> or review existing entries.

#### **App Marketplace**

Browse and install apps, plugins, and integrations that extend <code class="expression">space.vars.Kizen\_company\_name</code>’s functionality. The Marketplace includes quoting tools, email integrations, data loaders, developer tools, and other add-ons that connect <code class="expression">space.vars.Kizen\_company\_name</code> to your tech stack.

#### **Library**

Store and manage reusable content such as documents, files, templates, and media. Library items help teams standardize messaging and ensure the correct versions of assets are used throughout workflows.

#### **Surveys**

Build and distribute surveys to collect structured feedback. Survey responses can create or update records, trigger automations, or populate dashboards for analysis.

#### **Ad Manager**

Manage advertising data and connect ad campaigns to your Contacts and Objects. Use Ad Manager to track conversions, view lead performance, and connect marketing spend with outcomes inside <code class="expression">space.vars.Kizen\_company\_name</code>.
{% endtab %}

{% tab title="Agentic Workflows" %}

## **Agentic Workflows**

The <code class="expression">space.vars.automations</code> tab is where you build, manage, and monitor <code class="expression">space.vars.automations</code> in <code class="expression">space.vars.Kizen\_company\_name</code>. <code class="expression">space.vars.automations</code> help you streamline repetitive tasks, improve data accuracy, and ensure consistent follow-up across your business. You can create simple or advanced workflows that react to changes in your data, run on schedules, or integrate with external systems.

#### **What you can do in Agentic Workflow**s

1. Create <code class="expression">space.vars.automations</code>
2. Choose from multiple trigger types
3. Design custom logic
4. Send communications automatically
5. Connect to other parts of the platform
6. Monitor execution and troubleshoot issues
7. Reuse and maintain <code class="expression">space.vars.automations</code>

You can review your <code class="expression">space.vars.automations</code> to understand the automated processes in your workspace.

For more information, see [Agentic Workflows](/docs/concepts/agentic-workflows).
{% endtab %}

{% tab title="Settings" %}

### **Settings**

The **Settings** area controls your account configuration, user access, data structure, privacy rules, and integrations. Admins use this section to manage how <code class="expression">space.vars.Kizen\_company\_name</code> behaves for the entire organization.

#### **Business Information**

Update your company details, time zone, default formats, and communication settings.

#### **Team, Roles, & Permissions**

Add team members and manage who can view, edit, or delete data. Roles and permission sets define what each user can access across <code class="expression">space.vars.contacts</code>, <code class="expression">space.vars.objects</code>, <code class="expression">space.vars.automations</code>, <code class="expression">space.vars.dashboards</code>, and other features.

#### **Customize Fields**

Create and manage custom fields for <code class="expression">space.vars.contacts</code> and <code class="expression">space.vars.objects</code>. This helps you tailor data structures to your business needs.

#### **Domain & Tracking**

Configure domain settings and tracking preferences, including analytics, cookie/tracking behavior, and workspace URL controls.

#### **Privacy Settings**

Manage privacy and compliance options, such as data retention, consent, audit logging, and how personal data is handled.

#### **Manage Connections**

Set up and maintain integrations, API connections, and external data links. This is also where you review connection health and manage credentials used across the platform.

You can visit **Settings** to confirm your profile and permissions.
{% endtab %}
{% endtabs %}

***

## **Troubleshooting**

| Issue                              | What To Check                                                        |
| ---------------------------------- | -------------------------------------------------------------------- |
| You cannot sign in                 | Reset your password using **NEED HELP LOGGING IN?**                  |
| You do not see expected menu items | Your permission level may restrict visibility; contact your Admin    |
| You see a blank screen or errors   | Try a different browser or clear your cache                          |
| Navigation options look different  | Your workspace may use a custom configuration or a limited role view |

***

## **What’s Next**

Now that you know how to log in and move through the main areas of <code class="expression">space.vars.Kizen\_company\_name</code>, you’re ready to start building your <code class="expression">space.vars.Theme\_park\_name</code> business. Your next step is to [Create Your First Business](/docs/kizen-basics/kizen-in-action/create-your-first-business-workspace-or-kizen-basics) which allows you to set up your workspace so you can begin managing your data in <code class="expression">space.vars.Kizen\_company\_name</code>.

<details>

<summary>Related Topics</summary>

* [What is Kizen?](/docs/kizen-basics/what-is-kizen)
* [How is Kizen Structured?](/docs/kizen-basics/how-is-kizen-structured)
* [Kizen in Action](/docs/kizen-basics/kizen-in-action)
* [Building with APIs](/docs/developers/building-with-apis)
* [Where to Find Help](/docs/readme/where-to-find-help)

</details>


# Create Your First Business Workspace | Kizen Basics

Learn how to create your first Business in Kizen and understand how it serves as the foundation for data, users, and Agentic Workflows.

## Overview

{% hint style="warning" %}
**Caution:** This setup reflects Kizen's default configuration. Your administrator may have customized your layout, so columns or navigation may appear differently. Trial accounts may have limited features.
{% endhint %}

This page introduces how to create your first Business in <code class="expression">space.vars.Kizen\_company\_name</code>. Business workspaces allow you to store data and provides the foundation for everything you build. Creating a Business also generates a unique Business ID used for API requests and integrations. Reviewing this walkthrough will help you set up your workspace so you can begin organizing data, building <code class="expression">space.vars.workflows</code>, and managing operations within your Business.

### **Why This Matters**

A well-structured Business workspace ensures:

* Clean and organized data
* Accurate <code class="expression">space.vars.workflows</code> and <code class="expression">space.vars.automations</code>
* Correct role and permission behavior
* Reliable <code class="expression">space.vars.dashboards</code> and analytics
* A setup that scales as your organization grows

Starting with a strong Business workspace configuration reduces confusion and prevents rework later.

***

## **Before You Begin**

Most users **cannot** create a Business. You must be an Administrator with the correct permissions.

* If you’re not an Admin, ask one in your organization to create a sandbox or training workspace for you.
* If your Admin does not have permission to create a Business, contact <code class="expression">space.vars.Kizen\_company\_name</code> Support to have one made.

***

{% stepper %}
{% step %}

#### Select the **Profile** icon

{% endstep %}

{% step %}

#### In the dropdown menu, select **Add Business**

{% endstep %}

{% step %}

#### Enter your **Company Name** & **Business Name**

For this tutorial:

* Company Name: <code class="expression">space.vars.Theme\_park\_name</code>&#x20;
* <code class="expression">space.vars.Kizen\_company\_name</code> Business Name: Flywheel - Austin Location

{% hint style="info" %}
**Note:** The Company Name field should contain your company’s legal or public name. The <code class="expression">space.vars.Kizen\_company\_name</code> Business Name is the name of your workspace within <code class="expression">space.vars.Kizen\_company\_name</code>.
{% endhint %}

<div data-with-frame="true"><figure><img src="/files/KU7SuuOduAouMVMhrjqU" alt="" width="375"><figcaption></figcaption></figure></div>
{% endstep %}

{% step %}

#### Select **CREATE FROM SCRATCH**

<mark style="color:$success;">**(Optional)**</mark> You can also choose **CREATE WITH AI** to have <code class="expression">space.vars.Kizen\_company\_name</code> generate a starter Business.&#x20;
{% endstep %}
{% endstepper %}

The workspace you have just created will now become your base for building, testing, and analyzing every part of your <code class="expression">space.vars.Theme\_park\_name</code> use case. A unique Business ID was also created which will be needed for sending API authorizations.

{% hint style="info" %}
**Note:** If you have or are creating multiple business workspaces and are building APIs in each space, you will need to the unique `X-BUSINESS-ID` string for the space you want to modify.
{% endhint %}

<div data-with-frame="true"><figure><img src="/files/XmoQURwL4ngQ0VCBx8qT" alt="" width="563"><figcaption></figcaption></figure></div>

***

## How This Fits Into Agentic Workflows

Creating a Business is the foundation for all <code class="expression">space.vars.workflows</code> and <code class="expression">space.vars.automations</code> in <code class="expression">space.vars.Kizen\_company\_name</code>. Every <code class="expression">space.vars.workflow</code>, <code class="expression">space.vars.automation</code>, integration, and API interaction runs within the context of a Business.

Once a Business is created, it becomes the container where:

* <code class="expression">space.vars.objects</code> are defined and connected
* <code class="expression">space.vars.activities</code> are scheduled and logged
* <code class="expression">space.vars.automations</code> are triggered and executed
* Users, roles, and permissions are enforced
* External systems integrate through APIs and connectors

<code class="expression">space.vars.workflows</code> rely on the Business to understand *which data*, *which users*, and *which rules* apply. Without a Business, <code class="expression">space.vars.automations</code> have no context for where <code class="expression">space.vars.entities</code> live or how processes should behave.

For example, when you automate a follow-up <code class="expression">space.vars.activity</code>, trigger an email, or sync data from an external system, <code class="expression">space.vars.Kizen\_company\_name</code> uses the Business to determine:

* Which <code class="expression">space.vars.entities</code> to act on
* Which <code class="expression">space.vars.workflows</code> are allowed to run
* Which permissions apply to each action

By creating your Business first, you enable <code class="expression">space.vars.workflows</code> and <code class="expression">space.vars.automations</code> to operate consistently, securely, and at scale as your platform usage grows.

***

## Business Workspace Capabilities By Role

{% columns %}
{% column %}

#### Admins

* Create and manage Business workspaces
* Configure Business-level settings, including name, industry, and preferences
* Manage users, roles, and permissions within a Business
* Define which <code class="expression">space.vars.objects</code>, <code class="expression">space.vars.activities</code>, and features are available to teams
* Ensure data isolation and security between Business workspaces
  {% endcolumn %}

{% column %}

#### Technical Builders

* Build <code class="expression">space.vars.workflows</code> and <code class="expression">space.vars.automations</code> scoped to a specific Business
* Use the unique Business ID to create API calls for creating, updating, and searching <code class="expression">space.vars.entities</code>
* Integrate external systems and services at the Business level
* Configure connectors, webhooks, and event-driven <code class="expression">space.vars.workflows</code>
* Use Business-level context to support reporting, data sync, and orchestration
  {% endcolumn %}
  {% endcolumns %}

***

## Tying It Back Into Your Industry

While this guide uses a general setup example, a Business workspace in <code class="expression">space.vars.Kizen\_company\_name</code> maps directly to how organizations structure data, <code class="expression">space.vars.workflows</code>, and compliance boundaries across industries. Each Business acts as a secure, isolated environment where operations, users, and <code class="expression">space.vars.automations</code> are managed together.

{% tabs %}
{% tab title="Insurance" %}
In insurance, a Business workspace often represents a carrier, agency, or line of business.

Common examples include:

* Separating personal, commercial, and specialty insurance operations
* Managing multiple agencies or regions within distinct Business workspaces
* Isolating data and <code class="expression">space.vars.workflows</code> for compliance and regulatory requirements

By using Business workspaces, insurance teams ensure policies, claims, and client data remain properly scoped and compliant.
{% endtab %}

{% tab title="Healthcare" %}
In healthcare, a Business workspace can represent a practice, department, or care organization.

Common examples include:

* Managing separate clinics or service lines
* Isolating patient data by department or location
* Enforcing role-based access for clinical and administrative staff

Business workspaces help healthcare organizations maintain privacy, structure care <code class="expression">space.vars.workflows</code>, and support regulatory requirements such as HIPAA.
{% endtab %}

{% tab title="Financial Services" %}
In financial services, a Business workspace often maps to a firm, division, or client segment.

Common examples include:

* Separating retail, wealth management, and institutional operations
* Managing multiple advisory teams or branches
* Enforcing compliance controls across accounts and <code class="expression">space.vars.workflows</code>

By structuring operations into Business workspaces, financial teams maintain data integrity, improve governance, and scale securely.
{% endtab %}
{% endtabs %}

***

## **What’s Next?**

Continue to [Understanding your Business Settings](/docs/kizen-basics/kizen-in-action/configure-your-business-settings-or-kizen-basics) to start modeling <code class="expression">space.vars.Theme\_park\_name</code>'s core data. You'll use this information to set roles, permissions, and edit your business information & customizations.


# Configure Your Business Settings | Kizen Basics

Learn how Kizen administrators can configure their workspace by editing business information, adding team members, and creating roles and permission groups in the Settings area.

## Overview

Before your team begins working in <code class="expression">space.vars.Kizen\_company\_name</code>, an administrator needs to establish the foundations of your workspace. This topic walks you through three core setup tasks in the **Settings** area:

1. Editing your business information
2. Adding team members
3. Creating roles

Together, these tasks ensure that your workspace reflects your organization's identity, and that the right people have access.&#x20;

Throughout this topic, <code class="expression">space.vars.Theme\_park\_name</code> is used as the example business. You will add Jacob Mulligan and Sally Woods as team members as a Guest Services and Concession Stand Cook Staff.

{% hint style="info" %}
**Note**: In this tutorial, permissions on roles and team members will not be covered. To learn more about permission basics, review [Configure Your First Permissions](/docs/kizen-basics/kizen-in-action/configure-your-first-permission-groups-or-kizen-basics).
{% endhint %}

### Why This Matters&#x20;

Setting up your business information, team members, and roles correctly is not administrative overhead. It directly determines how effectively your organization operates inside the platform.

Without a clear structure:

* Users may have too much or too little access, leading to security risks or blocked <code class="expression">space.vars.workflows</code>
* Teams waste time navigating irrelevant data
* Reporting, ownership, and accountability become inconsistent

With a well-defined setup:

* Each team member sees only what they need, reducing errors and confusion
* Sensitive data is protected through controlled access
* <code class="expression">space.vars.workflows</code> run more smoothly because responsibilities and visibility are aligned
* Scaling your team becomes significantly easier since roles are already structured

This foundation ensures your workspace is not just functional, but controlled, secure, and aligned with how your business actually operates.

***

## Before You Begin

Before starting, confirm the following:

* You are logged in to <code class="expression">space.vars.Kizen\_company\_name</code> with an **Administrator** account. Only Admins can access and modify business settings.
* You have the full names and business email addresses of the team members you plan to add.
* Your business logo is available as an image file if you plan to upload it during the business information step.

***

## Configuring Your Business

### Task 1: Edit Your Business Information

Your business information appears throughout <code class="expression">space.vars.Kizen\_company\_name</code> and helps identify your workspace. Keep this information accurate so your team and any client-facing outputs reflect your brand correctly.

{% stepper %}
{% step %}

#### **Navigate to Settings using the main navigation menu.**

You'll land on **Business Information** (or Business Settings) from the **Settings** menu.

<div data-with-frame="true"><figure><img src="/files/DnFHReYC1vUy4S3vlfFL" alt="" width="563"><figcaption></figcaption></figure></div>
{% endstep %}

{% step %}

#### In the **Business Name** field, enter or confirm your organization's name.&#x20;

For this example, make sure it's: <code class="expression">space.vars.Theme\_park\_name</code>

Update any additional fields as needed, such as your business address, phone number, time zone, and date format preferences.

Upload your business logo if desired by selecting the logo upload area and choosing your image file.

Select **SAVE** to apply your changes.
{% endstep %}
{% endstepper %}

{% hint style="info" %}
**Note:** Timezone and date format settings affect how dates and times display across the platform for all users in your workspace. Set these carefully before your team begins logging <code class="expression">space.vars.activity</code>.
{% endhint %}

### Task 2: Add Team Members

Adding team members gives individuals access to your <code class="expression">space.vars.Kizen\_company\_name</code> workspace. Each team member is invited via email and must accept the invitation to complete account setup.

<div data-with-frame="true"><figure><img src="/files/nuWZAMko8nvnJqf4gwVj" alt="" width="563"><figcaption></figcaption></figure></div>

{% stepper %}
{% step %}

#### **In Settings, select Team, Roles, & Permissions.**

Select **NEW TEAM MEMBER**.
{% endstep %}

{% step %}

#### Enter the first team member's details:

* **First Name:** Jacob
* **Last Name:** Mulligan
* **Email:** <jacobmilligan@flywheel.com> (this is a fake email address)
* **Phone Number:** *Blank*
* **Set Roles(s)**: You'll assign Jacob a role once we have created one.
* **Add Additional Permission Group(s):** *Flywheel Guest Staff*
* Leave the remaining fields as default

<div data-with-frame="true"><figure><img src="/files/rjQD8iizXoWNKbBJ4OIs" alt="" width="375"><figcaption></figcaption></figure></div>
{% endstep %}

{% step %}

#### Select SAVE

{% endstep %}
{% endstepper %}

Jacob Mulligan will appear in your Team Members list with a **Unverified** status until they accept their invitations and complete setup.

### Task 3: Create Roles

Roles describe the job functions or positions within your organization. They help you organize your team and can be used throughout <code class="expression">space.vars.Kizen\_company\_name</code> to assign ownership and filter <code class="expression">space.vars.entities</code>.

<div data-with-frame="true"><figure><img src="/files/cLZPlvbDrbOTVrfNOAjr" alt="" width="563"><figcaption></figcaption></figure></div>

{% stepper %}
{% step %}

#### **In Settings, select Roles.**

Select **NEW ROLE**
{% endstep %}

{% step %}

#### **Enter the name** of the first role: Guest Services Staff

<div data-with-frame="true"><figure><img src="/files/9VbgNcSE7uIJBsiYokIs" alt="" width="375"><figcaption></figcaption></figure></div>

Set **Default Permission Group(s**): *Flywheel Guest Staff*

**Default for New Users**: Leave toggled off

Select **SAVE** to create the role.
{% endstep %}
{% endstepper %}

The role of Guest Services Staff now appears in your **Roles** list and is available to assign to team members. You can now go back to **Teams** tab, edit Jacob Mulligan, and assign him to be a **Guest Services Staff** role.

<div data-with-frame="true"><figure><img src="/files/KMrMkjTe6wuDGx8pAsh8" alt="" width="188"><figcaption></figcaption></figure></div>

***

## Apply What You've Learned

Now that you've created the Guest Staff Services role for Jacob Mulligan, add another team member and assign them the correct role.

**Team Member Details**

* **First Name:** Sally
* **Last Name:** Woods
* **Email:** <sallywoods@flywheel.com> *(this is a fake email address)*
* **Phone Number:** *Blank*
* **Role Name:** Concession Stand Cook
* **Permissions Group**: *Flywheel Concession Staff*

After completing this step, you should have:

* **Jacob Mulligan** and **Sally Woods** in the **Team** tab.
* **Guest Services Staff** and **Concession Stand Cook** in the **Roles** tab.

***

## How This Fits Into Agentic Workflows

Business Settings define the environment that <code class="expression">space.vars.workflows</code>, <code class="expression">space.vars.automations</code>, and users operate within.

Once configured, they influence three critical areas: **timing, communication, and user context**.

* **Timing:** <code class="expression">space.vars.automations</code> run based on your Business time zone. Scheduled <code class="expression">space.vars.workflows</code>, reminders, and <code class="expression">space.vars.activity</code> logging all follow this setting.
* **Communication:** Emails and messages triggered by <code class="expression">space.vars.workflows</code> use your Business-level defaults, such as sender address and phone configuration.
* **User context (roles and team members):** <code class="expression">space.vars.workflows</code> operate on <code class="expression">space.vars.entities</code> that are owned, updated, or assigned to specific team members.

For example:

* A <code class="expression">space.vars.workflow</code> that assigns a follow-up task will assign it to a **team member** with the appropriate role
* Notifications and <code class="expression">space.vars.activities</code> are tied to specific **users**, not just <code class="expression">space.vars.entities</code>

By configuring Business Settings alongside your team and roles, you ensure <code class="expression">space.vars.workflows</code> run correctly and reach the right people.

***

## Business Workspace Capabilities By Role

{% columns %}
{% column %}

#### Admins

* Configure Business Settings (name, branding, time zone, communication defaults)
* Add and manage team members
* Create and manage roles
* Ensure <code class="expression">space.vars.workflows</code> and <code class="expression">space.vars.automations</code> operate within the correct access boundaries
  {% endcolumn %}

{% column %}

#### Technical Builders

* Build <code class="expression">space.vars.workflows</code> and <code class="expression">space.vars.automations</code> that assign tasks and update <code class="expression">space.vars.entities</code> based on team structure
* Use roles and user assignments to control how <code class="expression">space.vars.automations</code> route work
* Configure integrations that rely on Business-level context and user access
  {% endcolumn %}
  {% endcolumns %}

***

## Tying It Back to Your Industry

While <code class="expression">space.vars.Theme\_park\_name</code> demonstrates a physical, guest-facing business, the same setup principles apply to industries where data access, compliance, and role clarity are critical.

{% tabs %}
{% tab title="Insurance" %}
In insurance organizations, teams are often divided between agents, claims processors, and underwriting staff.

* **Agents** need access to client contact <code class="expression">space.vars.entities</code>, policy details, and communication history, but should not have full visibility into underwriting decisions or internal financial data.
* **Claims processors** require access to claims <code class="expression">space.vars.entities</code> and supporting documentation, along with the ability to update claim status and timelines.
* **Underwriters** may need broader access to risk data and policy structures but limited interaction with day-to-day client communication <code class="expression">space.vars.entities</code>.

By defining clear roles, you ensure that sensitive financial and personal data is only accessible to those who need it, reducing compliance risk and operational errors.
{% endtab %}

{% tab title="Healthcare" %}
Healthcare organizations rely heavily on strict access controls due to patient privacy requirements.

* **Front desk staff** need access to patient intake forms, appointment records, and basic contact information.
* **Clinical staff** require access to medical records, treatment history, and care plans.
* **Billing teams** need access to insurance information and payment records but should not modify clinical data.

Using roles allows you to create distinct clinical, administrative, and financial positions. This helps maintain compliance with regulations while ensuring each team can do their job efficiently.
{% endtab %}

{% tab title="Financial Services" %}
In financial services, teams often work across client management, compliance, and operations.

* **Advisors** need access to client profiles, portfolios, and communication history.
* **Operations teams** handle transactions, account updates, and internal <code class="expression">space.vars.workflows</code>.
* **Compliance teams** require visibility into activity logs and records but typically do not modify client data directly.

A structured approach to roles ensures that sensitive financial data is protected while still allowing teams to collaborate effectively. It also makes auditing and oversight significantly easier.
{% endtab %}
{% endtabs %}

***

## What's Next

Now that your workspace is configured with business information, team members, and roles, you are ready to build out the operational tools your team will use daily. Next, [Create Your First Contact Record](/docs/kizen-basics/kizen-in-action/create-your-first-contact-record-or-kizen-basics).


# Create Your First Contact Record | Kizen Basics

Learn how to create your first Contact Record in Kizen and understand how Contacts are used across Activities, Agentic Workflows, and data relationships.

## Overview

{% hint style="warning" %}
**Caution:** This setup reflects Kizen's default configuration. Your administrator may have customized your layout, so columns or navigation may appear differently. Trial accounts may have limited features.
{% endhint %}

In <code class="expression">space.vars.Kizen\_company\_name</code>, a [Contact](/docs/concepts/objects/contacts) represents a single person you plan to communicate with through emails, SMS messages, or other outreach. <code class="expression">space.vars.contacts</code> are part of <code class="expression">space.vars.Kizen\_company\_name</code>’s built-in data model and work like a standard <code class="expression">space.vars.entity</code> type.&#x20;

Email acts as the primary identifier for communication purposes, but it is not required. If left blank, it may limit certain lookup or messaging scenarios.

{% hint style="info" %}
**Note:** Storing people in <code class="expression">space.vars.contacts</code> allows you to **message** them through <code class="expression">space.vars.Kizen\_company\_name</code>’s SMS or email <code class="expression">space.vars.automations</code>. You should always store people as <code class="expression">space.vars.contacts</code> even if you don't plan to message them.
{% endhint %}

### Why This Matters

<code class="expression">space.vars.contacts</code> are the standard way to store people in <code class="expression">space.vars.Kizen\_company\_name</code>. Every individual your organization interacts with should be stored as a <code class="expression">space.vars.contact</code> <code class="expression">space.vars.entity</code>, regardless of whether you plan to communicate with them directly.

Using <code class="expression">space.vars.contacts</code> consistently ensures that you:

* Maintain a single, centralized <code class="expression">space.vars.entity</code> for each person
* Enable email and SMS <code class="expression">space.vars.automations</code> when communication is required
* Track activities, interactions, and history tied to that individual
* Keep operational data organized separately within <code class="expression">space.vars.objects</code>

As your data model grows, storing all people in <code class="expression">space.vars.contacts</code> helps maintain a clear structure between individuals and the operational <code class="expression">space.vars.entities</code> associated with them. This makes <code class="expression">space.vars.automations</code>, reporting, and integrations more predictable and easier to manage.

In Contacts, Email acts as the unique identifier for communication purposes — but it is **not required**, and some users may leave it blank which can cause data retrieval issues if trying to use it for anything other than messaging customers.&#x20;

### Before You Begin

Before creating your <code class="expression">space.vars.contacts</code>, you must have the following:

* **Admin** role and permissions to create and edit <code class="expression">space.vars.entities</code>
* A Business workspace in <code class="expression">space.vars.Kizen\_company\_name</code> (See: [Create Your First Business Workspace](/docs/kizen-basics/kizen-in-action/create-your-first-business-workspace-or-kizen-basics))

***

## Meet The Reyes Family

To help you understand how <code class="expression">space.vars.contact</code> <code class="expression">space.vars.entities</code> work, we’ll follow the Reyes family, who are visiting <code class="expression">space.vars.Theme\_park\_name</code> for the first time. We introduced the following family in the [Kizen Basics in Action](/docs/kizen-basics/kizen-in-action) topic.

* **Marcus Reyes:** Planner of the family trip; books tickets online.
* **Elena Reyes:** Manages communication and receives all confirmation emails.
* **Sofia Reyes** *(age 12):* Loves roller coasters; needs a wristband waiver.
* **Caleb Reyes** *(age 8):* Signs up for the Junior Explorer scavenger event.

Marcus purchases tickets through the <code class="expression">space.vars.Theme\_park\_name</code> online form. When he submits the booking, you’ll store him as a <code class="expression">space.vars.contact</code> because <code class="expression">space.vars.Theme\_park\_name</code> needs to send him:

* A confirmation email
* Instructions on the Day of Park entry
* A survey after the visit

Elena, Sofia, and Caleb will also be stored as <code class="expression">space.vars.contacts</code>, even though they do not need to receive emails directly. In this lesson, you will create Marcus’ <code class="expression">space.vars.contact</code> <code class="expression">space.vars.entity</code> in <code class="expression">space.vars.Kizen\_company\_name</code>. You will then apply the same steps to create <code class="expression">space.vars.contact</code> <code class="expression">space.vars.entity</code> for Elena, Sofia, and Caleb.

***

## Creating Contact Records

{% stepper %}
{% step %}

#### In Kizen, navigate to **Contacts**

Select **Data** > **Contacts** in your navigation.

<div data-with-frame="true"><figure><img src="/files/SrlJcCRjmNdQdSg52omX" alt="" width="563"><figcaption></figcaption></figure></div>

The <code class="expression">space.vars.contacts</code> page appears.
{% endstep %}

{% step %}

#### Select **NEW CONTACT**

<div data-with-frame="true"><figure><img src="/files/siQJ8HaFWA72a3gbbcTk" alt="" width="563"><figcaption></figcaption></figure></div>

The **Add Contact** modal appears.
{% endstep %}

{% step %}

#### Add all Contact details

Fill out the form using our example. Since Marcus submitted an online booking form to purchase tickets, he is the first <code class="expression">space.vars.contact</code> we will add.

<div data-with-frame="true"><figure><img src="/files/xp9tAZLfNYzf1wRgjW1r" alt="" width="375"><figcaption></figcaption></figure></div>

Enter the following:

* **First Name:** Marcus
* **Last Name:** Reyes
* **Email:** <marcus.reyes@example.com>
  * Not a required field, but necessary for email communications and is the unique identifier for the <code class="expression">space.vars.entity</code>.
* **Email Status:** Opt In
  * This is required for messaging as all other statuses will prevent emails from being sent by <code class="expression">space.vars.Kizen\_company\_name</code>.
* **Home Phone:** 123-456-7890
  * Not a required field, but necessary for SMS communications.
* **Custom Fields:** Any fields <code class="expression">space.vars.Theme\_park\_name</code> configured for guest communication.&#x20;

{% hint style="info" %}
**Note:** These are fields that are customizable and can capture any field data you specify. By default Primary Company <code class="expression">space.vars.entity</code> and Additional Company <code class="expression">space.vars.entities</code> are visible. For now we will leave these blank.
{% endhint %}

For this example we will use the following:

* **Title:** Mr.

{% hint style="success" %}
Titles help you label <code class="expression">space.vars.contacts</code> with options like Dr., Mr., Mrs., Ms., or Miss. You can add a new one from the dropdown using **Add Title**.
{% endhint %}

* **Tags:** Leave it Blank

{% hint style="success" %}
Tags let you organize <code class="expression">space.vars.contacts</code> into meaningful groups, like “CloudCon 2021 Signups,” “Drip Campaign 2.1 Beta,” or “Joe’s Hand-Curated Prospects.”
{% endhint %}

* **Birthday:** 12/15/1983
* **Timezone:** America/Chicago
  {% endstep %}

{% step %}

#### Select **SAVE**

After saving Marcus' <code class="expression">space.vars.entity</code>, you will see:

* **All visible fields:** (standard + custom)
* **Timeline:** where future activities and emails will appear
* **Activity Panel:** where staff can log calls, notes, or reminders in the future
* **Agentic Workflows:** which can send Marcus a confirmation email or create a follow-up task once it's set up.
  {% endstep %}
  {% endstepper %}

***

## Applying What You've Learned

With Marcus's <code class="expression">space.vars.contact</code> <code class="expression">space.vars.entity</code> complete, it’s time to create <code class="expression">space.vars.contact</code> <code class="expression">space.vars.entities</code> for the rest of the family using the same steps. Use the information below to set it up.

| Field             | Elena Reyes               | Sofia Reyes               | Caleb Reyes               |
| ----------------- | ------------------------- | ------------------------- | ------------------------- |
| **First Name**    | Elena                     | Sofia                     | Caleb                     |
| **Last Name**     | Reyes                     | Reyes                     | Reyes                     |
| **Email**         | <reyes.elena@yopmail.com> | <sofia.reyes@yopmail.com> | <caleb.reyes@yopmail.com> |
| **Email Status**  | Opt In                    | Opt In                    | Opt In                    |
| **Home Phone**    | 234-567-8911              | —                         | —                         |
| **Title**         | Mrs.                      | —                         | —                         |
| **Tags**          | —                         | —                         | —                         |
| **Birthday**      | 03/08/1986                | 07/14/2012                | 09/02/2016                |
| **Timezone**      | US/Central                | US/Central                | US/Central                |
| **Custom Fields** | Blank                     | Blank                     | Blank                     |

***

## Editing Your Viewable Columns

<div data-with-frame="true"><figure><img src="/files/pdd9zjTpbjbkpjeohNeo" alt="" width="563"><figcaption></figcaption></figure></div>

As you can see, Marcus Reyes has now been added as <code class="expression">space.vars.contacts</code> in <code class="expression">space.vars.Kizen\_company\_name</code>. By default the following columns are viewable:

* Full Name
* Email
* Mobile phone
* Titles
* Tags

Next, we are going to modify the columns to display the fields we want and in what order.

{% stepper %}
{% step %}

#### Click on **Edit Columns**

<div data-with-frame="true"><figure><img src="/files/rfzXbHT0AM2wGA17mxtV" alt=""><figcaption></figcaption></figure></div>

You will be taken to the Edit My Columns screen
{% endstep %}

{% step %}

#### Move your chosen columns into the **Active Table Columns**

For this example we will move:

* Home phone
* Birthday
* Email Status
* Timezone

We'll also remove the following by placing them into **Available Columns**:

* Mobile phone
* Tags

You can also reorder your columns on the table by placing them in the order you would like for them to display in **Active Table Columns**. In this example you can see the added and removed columns, and the new order.

<div data-with-frame="true"><figure><img src="/files/on0GIMuoNWcjsiWxgltT" alt=""><figcaption></figcaption></figure></div>
{% endstep %}

{% step %}

#### Select **SAVE**

This will save your column choices and take you back to the <code class="expression">space.vars.contacts</code> page.

<div data-with-frame="true"><figure><img src="/files/XHIDfdNKuD2VkI2lbOtW" alt="" width="563"><figcaption></figcaption></figure></div>

Now you can see the <code class="expression">space.vars.contacts</code> page display with your new column order.
{% endstep %}
{% endstepper %}

***

## How This Fits Into Agentic Workflows

Now that you’ve added Marcus Reyes and customized your <code class="expression">space.vars.contact</code> table view, the next step is to add the rest of the Reyes family as <code class="expression">space.vars.contact</code> <code class="expression">space.vars.entities</code>.

Even if Elena, Sofia, and Caleb are not the recipients of emails or SMS messages, they should still be stored as <code class="expression">space.vars.contacts</code> because they represent real people tied to park operations and guest history. In <code class="expression">space.vars.Kizen\_company\_name</code>, a <code class="expression">space.vars.contact</code> can exist without being used for messaging.

As you add Elena, Sofia, and Caleb Reyes:

* Create one <code class="expression">space.vars.contact</code> per person
* Leave Email blank for family members who should not receive communications
* Set messaging-related fields (such as Email Status) according to your business rules
* Use consistent names and information (like phone number or address) so the family can be associated correctly in later steps

When you finish, you should have four <code class="expression">space.vars.contact</code> <code class="expression">space.vars.entities</code>:

* Marcus Reyes (primary communication <code class="expression">space.vars.contact</code> with an email listed)
* Elena Reyes
* Sofia Reyes
* Caleb Reyes

<div data-with-frame="true"><figure><img src="/files/mIcK6XL5Er0opOOBOyoO" alt=""><figcaption></figcaption></figure></div>

In the next lesson, you’ll start building the data model that connects these <code class="expression">space.vars.contacts</code> to operational records such as tickets and <code class="expression">space.vars.activities</code>.

***

## How This Fits Into Agentic Workflows

As soon as Marcus and his family becomes a <code class="expression">space.vars.contact</code>, <code class="expression">space.vars.Kizen\_company\_name</code> can:

* Send a confirmation email
* Trigger a welcome SMS
* Create a pre-visit task for staff
* Add Marcus or his family to an email drip sequence
* Kick off <code class="expression">space.vars.workflows</code> tied to <code class="expression">space.vars.contact</code> creation

Adding people to <code class="expression">space.vars.contacts</code> also allows you to later build <code class="expression">space.vars.automations</code> such as:

* Sending reminders
* Assigning <code class="expression">space.vars.activities</code>
* Creating Scheduled <code class="expression">space.vars.activities</code>
* Tracking guest history
* Building <code class="expression">space.vars.dashboards</code> of guest engagement

***

## Contact Capabilities By Role

{% columns %}
{% column %}

#### **Admins**

* Configure <code class="expression">space.vars.contact</code> fields
* Manage permissions
* Set up <code class="expression">space.vars.workflows</code> and <code class="expression">space.vars.automations</code> connected to <code class="expression">space.vars.contacts</code>
  {% endcolumn %}

{% column %}

#### **Technical Builders**

* Use [Objects APIs](/docs/concepts/objects/object-apis) to create or update <code class="expression">space.vars.contact</code> <code class="expression">space.vars.entities</code> programmatically
* Configure inbound webhooks when <code class="expression">space.vars.contacts</code> originate from external forms or systems
* Map incoming data to the <code class="expression">space.vars.contact</code> <code class="expression">space.vars.object</code> through ETL or integration tools
  {% endcolumn %}
  {% endcolumns %}

***

## Tying It Back Into Your Industry

While the Reyes family example demonstrates how <code class="expression">space.vars.contacts</code> work in a theme park scenario, the same concepts apply across industries. A <code class="expression">space.vars.contact</code> is simply a <code class="expression">space.vars.entity</code> representing a person, whether you communicate with them directly through email, SMS, or automated <code class="expression">space.vars.workflows</code>, or not.

How you structure your [Contact Data Model](/docs/concepts/objects/contacts/contacts-data-model) determines how easily your organization can manage communication, track interactions, and automate processes as your system grows.

Below are examples of how <code class="expression">space.vars.contacts</code> function in three common industries supported by <code class="expression">space.vars.Kizen\_company\_name</code>.

{% tabs %}
{% tab title="Insurance" %}
In insurance, a <code class="expression">space.vars.contact</code> often represents a policyholder, applicant, or agent who needs to receive quotes, renewal notices, eligibility updates, or claims communications.

Example <code class="expression">space.vars.contact</code> <code class="expression">space.vars.automations</code>:

* Email a quote packet after an application is submitted
* Notify an agent when underwriting status changes
* Send renewal reminders or required-document checklists
* Trigger tasks for claims adjusters or verification teams

Use <code class="expression">space.vars.objects</code> to store structured data like applications, policies, beneficiaries, claims, and supporting documents, while <code class="expression">space.vars.contacts</code> remain the communication endpoint.
{% endtab %}

{% tab title="Healthcare" %}
In healthcare, a <code class="expression">space.vars.contact</code> often represents a patient, caregiver, or responsible party who must receive appointment reminders, care instructions, follow-up messages, or portal notifications.

Example <code class="expression">space.vars.contact</code> <code class="expression">space.vars.automations</code>:

* Send pre-visit instructions when a patient books an appointment
* Trigger SMS reminders 24 hours before a procedure
* Log follow-up calls or care-team activities directly on the <code class="expression">space.vars.contact</code> timeline
* Send discharge instructions or satisfaction surveys automatically

Use <code class="expression">space.vars.contacts</code> when communication is required. Use <code class="expression">space.vars.objects</code> for clinical <code class="expression">space.vars.workflows</code> like care plans, intake forms, encounters, or orders that you don’t message directly.
{% endtab %}

{% tab title="Financial Services" %}
In financial services, a <code class="expression">space.vars.contact</code> typically represents a client, borrower, investor, or account holder who needs time-sensitive updates or required disclosures.

Example <code class="expression">space.vars.contact</code> <code class="expression">space.vars.automations</code>:

* Send onboarding emails after a new account is created
* Trigger reminders for outstanding documentation
* Log advisor calls or follow-up tasks
* Send periodic statements, alerts, or investment updates

<code class="expression">space.vars.objects</code> store operational data such as accounts, transactions, loans, risk reviews, or KYC/AML <code class="expression">space.vars.entities</code>, while <code class="expression">space.vars.contacts</code> manage all direct communication.
{% endtab %}
{% endtabs %}

***

## What’s Next?

Now you’ll begin building the foundation of <code class="expression">space.vars.Kizen\_company\_name</code>’s data model. In [Create Your First Object](/docs/kizen-basics/kizen-in-action/create-your-first-object-or-kizen-basics), you will first create a Tickets <code class="expression">space.vars.object</code> to track purchases like Marcus’s park tickets. You will then create Concessions and Ride Waiver <code class="expression">space.vars.objects</code> to track food and merchandise purchases and store ride waiver information for guests.


# Create Your First Object | Kizen Basics

Learn how to create your first Object in Kizen and understand how custom data structures support & Agentic Workflows.

## Overview

{% hint style="warning" %}
**Caution:** This setup reflects Kizen's default configuration. Your administrator may have customized your layout, so columns or navigation may appear differently. Trial accounts may have limited features.
{% endhint %}

In <code class="expression">space.vars.Kizen\_company\_name</code>, an <code class="expression">space.vars.object</code> is like a table or a data container that you create to store and organize the data that matters to your business. <code class="expression">space.vars.objects</code> hold the <code class="expression">space.vars.entities</code> you’ll reference in <code class="expression">space.vars.automations</code>, <code class="expression">space.vars.dashboards</code>, and <code class="expression">space.vars.workflows</code>. <code class="expression">space.vars.contacts</code> store the people you need to communicate with, <code class="expression">space.vars.objects</code> store everything else — tickets, ride waivers, concessions, assets, tasks, memberships, and more.

In this walkthrough, you’ll create three <code class="expression">space.vars.objects</code> for <code class="expression">space.vars.Theme\_park\_name</code>:

* **Tickets Object:** to store ticket purchases and visitor passes, such as Marcus’s family admission
* **Concessions Object:** to capture food and merchandise purchases made during park visits
* **Ride Waiver Object:** to store and track ride waivers signed by guests

These <code class="expression">space.vars.objects</code> will become the foundation for your next steps, including creating <code class="expression">space.vars.entities</code> and building <code class="expression">space.vars.workflows</code> that automate communication, follow-up tasks, and daily park operations.

### Why This Matters

<code class="expression">space.vars.objects</code> define where your data lives and how it’s structured. Clear <code class="expression">space.vars.object</code> design prevents errors later, such as:

* <code class="expression">space.vars.workflows</code> not triggering correctly
* <code class="expression">space.vars.automations</code> missing required fields
* Reports failing to show accurate information
* Disorganized or duplicated data across your business

A well-planned <code class="expression">space.vars.object</code> gives your team a consistent, scalable data foundation. Now, lets start by creating your **Tickets** <code class="expression">space.vars.object</code>.

### Before You Begin

Before creating an <code class="expression">space.vars.object</code>, you must have the following:

* **Admin** permissions with the ability to create and edit <code class="expression">space.vars.entities</code>
* A Business workspace created

***

{% stepper %}
{% step %}

#### Navigate to **Objects**

<div data-with-frame="true"><figure><img src="/files/ACExlVTIaxGJtGuYB7KE" alt="" width="563"><figcaption></figcaption></figure></div>

1. In the top navigation, select **Data**.
2. Choose **Custom Objects**.

The Objects page opens with a default **Companies Object** already created. You won't need it for this walkthrough — feel free to delete it by selecting the ellipsis in the **Actions** column. If your real-world use case involves companies, keep it.
{% endstep %}

{% step %}

#### Select **NEW OBJECT**

The Reyes family includes four visitors. Earlier, you created <code class="expression">space.vars.contact</code> <code class="expression">space.vars.entities</code> to store information about each member of the family.&#x20;

Now, you will create a **Tickets Object** to store ticket purchases made for park visits. This <code class="expression">space.vars.object</code> will define the structure used to capture purchases, such as who bought the tickets, how many were purchased, and the date of the visit.

{% hint style="info" %}
**Note:** In later steps, you will create Ticket <code class="expression">space.vars.entities</code> within this <code class="expression">space.vars.object</code> to track purchases like the one Marcus made for his family.
{% endhint %}

First, select the **NEW OBJECT** button. You will be taken to the General Settings page for your <code class="expression">space.vars.object</code>.
{% endstep %}

{% step %}

#### Fill out the **General Settings** page

<div data-with-frame="true"><figure><img src="/files/8a8NifYvcVdxGkHU240r" alt="" width="563"><figcaption></figcaption></figure></div>

For this example, you will enter the following:

* **Object Name:** Tickets

{% hint style="info" %}
**Note:** This is the name of the <code class="expression">space.vars.object</code> and represents the type of data you’re tracking. An <code class="expression">space.vars.object</code> is like a table or container, so this name describes the collection of <code class="expression">space.vars.entities</code> it will hold.
{% endhint %}

* **Record Name:** Ticket

{% hint style="info" %}
**Note:** This is the name you want to call an individual <code class="expression">space.vars.entity</code> in your <code class="expression">space.vars.object</code>. Remember, this is a specific <code class="expression">space.vars.entity</code> inside of your collection of data. Currently, this is called **Entity Name** in the UI.
{% endhint %}

* **Contains Workflow:** Disable

{% hint style="info" %}
**Note:** This feature is used for creating opportunity or deal pipelines and ticket workflows. We won’t use it in this example, but you’ll learn how it works in the [Create Your First Workflow](/docs/kizen-basics/kizen-in-action/create-your-first-workflow-or-kizen-in-action) topic.
{% endhint %}

* **Enable Quick Filters:** Disable
* **Object Description:** Stores <code class="expression">space.vars.entities</code> of ticket purchases made for park visits. This <code class="expression">space.vars.object</code> tracks details such as the purchaser, number of tickets, visit date, and other information related to admission.
* **Enable Activities:** Enabled
* **Track Track Entity $ Value:** Enabled
  {% endstep %}

{% step %}

#### Select **SAVE & CONTINUE**

This will automatically save your <code class="expression">space.vars.object</code> and take you to the Related <code class="expression">space.vars.objects</code> step below.

{% hint style="info" %}
**Note:** The Contacts relationship appears by default but isn't saved until you select **SAVE & CONTINUE.**
{% endhint %}

<div data-with-frame="true"><figure><img src="/files/6CpUn7iKFjTkxpnNaedh" alt="" width="563"><figcaption></figcaption></figure></div>

Next, we need to create a relationship between the Tickets Marcus purchased in the Tickets <code class="expression">space.vars.object</code> and his <code class="expression">space.vars.contact</code> information in the <code class="expression">space.vars.contacts</code> <code class="expression">space.vars.object</code> so we can keep track of who purchased what tickets.  To do this, under **Related Objects.**

Then enter the following:

* **Related Object:** Contacts
* **Relationship Type:** Many-to-One
* **Relationship Name:** Purchaser Contact
* **Reverse Relationship Name:** Related Ticket Records

<div data-with-frame="true"><figure><img src="/files/zPUxvIeK4TAsg2XJ1gj6" alt="" width="563"><figcaption></figcaption></figure></div>

Select **SAVE & CONTINUE**.
{% endstep %}

{% step %}

#### **Modify Step 3 Customize Fields**

Here is where you can [Customize your Object Fields](/docs/concepts/objects/custom-fields). The <code class="expression">space.vars.field</code> acts like a column in your table of data inside your <code class="expression">space.vars.object</code>. As you can see, when you created your <code class="expression">space.vars.object</code>, <code class="expression">space.vars.Kizen\_company\_name</code> automatically created table columns for you.

<div data-with-frame="true"><figure><img src="/files/n0qokSBk3W7gLQsW7J1B" alt="" width="563"><figcaption></figcaption></figure></div>

{% hint style="info" %}
**Note:** <code class="expression">space.vars.Kizen\_company\_name</code> automatically creates the **Ticket Name** field as the unique identifier for this <code class="expression">space.vars.object</code>.
{% endhint %}

Now, we will create new column data. Select **+ADD NEW FIELD** and create the following so we can properly capture your Ticket data. Add the following fields:

{% hint style="info" %}
**Note:** That you do not need to change the **Category** or **Description Visibility** settings for this example.
{% endhint %}

<div data-with-frame="true"><figure><img src="/files/twIkjCjWzkogM1xpZN65" alt="" width="563"><figcaption></figcaption></figure></div>

| Field Name            | Description                                               | Field Type                             | Field Purpose                                                                                         |
| --------------------- | --------------------------------------------------------- | -------------------------------------- | ----------------------------------------------------------------------------------------------------- |
| **Visit Date**        | The date the tickets are valid for entry to the park.     | Date                                   | Tracks when the guest plans to visit the park.                                                        |
| **Number of Tickets** | The total number of tickets purchased in the transaction. | Number (Whole)                         | <code class="expression">space.vars.entities</code> how many admissions were purchased for the visit. |
| **Admission Status**  | Indicates whether the ticket has been used for entry.     | Dropdown. (Unused,Used)                | Tracks whether the ticket has been used or is still unused.                                           |
| **Purchase Method**   | Tracks how the tickets were purchased.                    | Dropdown (Online, In Person, Telephone | Identifies the source of the purchase, such as Online or In Person.                                   |

All new <code class="expression">space.vars.fields</code> should be visible in your Ticket info category including the relationship field you created in step 2.

<div data-with-frame="true"><figure><img src="/files/FIO9tcFi8BcHM6hBJD8Y" alt="" width="563"><figcaption></figcaption></figure></div>

Select **NEXT STEP** to continue.

{% hint style="info" %}
**Note:** You can use the **ADD NEW CATEGORY** feature to organize your <code class="expression">space.vars.fields</code> by category.
{% endhint %}
{% endstep %}

{% step %}

#### Select **Default Columns** tab from **Step 4 Customize Layout**

Here is where you can take the <code class="expression">space.vars.fields</code> you just created and then organize them on your Ticket Overview table.

<div data-with-frame="true"><figure><img src="/files/KWZGh7aHoQeQHRzLAafp" alt="" width="563"><figcaption></figcaption></figure></div>

Lets add the following fields we just created:

* Purchaser <code class="expression">space.vars.contact</code>
* Visit Date
* Number of Tickets
* Admission Status
* Purchase Method

Lets remove the columns we don't need that came standard with the Tickets <code class="expression">space.vars.object</code>.

* Owner
* Display Name
* Last Modified
  {% endstep %}

{% step %}

#### Select **SAVE & CLOSE**

<div data-with-frame="true"><figure><img src="/files/TMZas58LwXt4E2Av3gkf" alt="" width="563"><figcaption></figcaption></figure></div>

Your Tickets <code class="expression">space.vars.object</code> is now ready to store <code class="expression">space.vars.entities</code> and support <code class="expression">space.vars.workflows</code> later in the walkthrough.
{% endstep %}
{% endstepper %}

***

## Apply What You've Learned

With the Tickets <code class="expression">space.vars.object</code> now complete, it’s time to apply what you have learned to create Concessions and Ride Waiver <code class="expression">space.vars.objects</code> using the same steps. These <code class="expression">space.vars.objects</code> will track purchases made in the park and adherence to safety policies.

Use the information below to set it up.

* **Object Name:** Concessions
* **Record (Entity) Name:** Concession
* **Enable Workflows:** Disable
* **Enable Quick Filters:** Disable
* **Object Description:** Stores records of concession purchases, including the product purchased, purchase date, visit date, and the Contact who made the purchase.
* **Enable Activities:** Enabled
* **Track Track Entity $ Value:** Enabled

#### Create Your Fields For The Concessions Object

{% hint style="info" %}
**Note:** For this example **do not** modify the Category or Description Visibility fields.
{% endhint %}

| Field Name                                | Description                                                                                                                                   | Field Type               | Field Purpose                                                                                                                                                  |
| ----------------------------------------- | --------------------------------------------------------------------------------------------------------------------------------------------- | ------------------------ | -------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| **Concession Name** *(Unique Identifier)* | A unique name for the concession purchased                                                                                                    | Text (Unique Identifier) | Identifies the concession purchase <code class="expression">space.vars.entity</code> within the Concessions <code class="expression">space.vars.object</code>. |
| **Concession Value**                      | The total cost of the concession purchase.                                                                                                    | Currency                 | Tracks the revenue generated from the purchase.                                                                                                                |
| **Primary Contact**                       | The <code class="expression">space.vars.contact</code> <code class="expression">space.vars.entity</code> of the person who made the purchase. | Relationship (Contacts)  | Links the concession purchase to the person responsible for the order.                                                                                         |
| **Purchase Date**                         | The date the concession item was purchased.                                                                                                   | Date/Time                | Tracks when the purchase occurred.                                                                                                                             |
| **Quantity**                              | The number of items purchased.                                                                                                                | Number (Whole)           | Captures how many units of the item were purchased.                                                                                                            |

#### Customize Your Default Columns

Now Navigate to **Customize Layout** > **Default Columns** and move your columns as follows

{% columns %}
{% column %}

#### Available Columns

Owner

Date Created

Display Name

Last Modified
{% endcolumn %}

{% column %}

#### Active Table Columns

Concession Name

Concession Value

Primary <code class="expression">space.vars.contact</code> Record

Purchase Date

Quantity

{% endcolumn %}
{% endcolumns %}

Select **SAVE & CONTINUE**, then **FINALIZE YOUR OBJECT** (you do not need to set permissions at this time). Now your **Concessions** <code class="expression">space.vars.object</code> is now ready for <code class="expression">space.vars.entity</code> creation and <code class="expression">space.vars.automation</code> triggers (such as sending confirmation messages or creating follow-up tasks)!

<div data-with-frame="true"><figure><img src="/files/yh2Psal0AVUsVGopY5k2" alt="" width="563"><figcaption></figcaption></figure></div>

Now create one more new <code class="expression">space.vars.object</code> for ride waivers and use the information below to set it up.

* **Object Name:** Ride Waivers
* **Record (Entity) Name:** Ride Waiver
* **Enable Workflows:** Disable
* **Enable Quick Filters:** Disable
* **Object Description:** Stores <code class="expression">space.vars.entities</code> of ride waivers signed for park attractions, including the ride name, waiver date, visit date, and the <code class="expression">space.vars.contact</code> associated with the waiver.
* **Enable Activities:** Enabled
* **Track Track Entity $ Value:** Disabled

| Field Name                                 | Description                                                                                                                                               | Field Type                           | Field Purpose                                                                                                                                     |
| ------------------------------------------ | --------------------------------------------------------------------------------------------------------------------------------------------------------- | ------------------------------------ | ------------------------------------------------------------------------------------------------------------------------------------------------- |
| **Ride Waiver Name** *(Unique Identifier)* | A unique name for the waiver <code class="expression">space.vars.entity</code>.                                                                           | Text (Unique Identifier)             | Identifies the waiver <code class="expression">space.vars.entity</code> within the Ride Waiver <code class="expression">space.vars.object</code>. |
| **Guest Record**                           | The <code class="expression">space.vars.contact</code> <code class="expression">space.vars.entity</code> of the guest who requires the waiver.            | Relationship: Contacts               | Links the waiver to the individual guest participating in the ride.                                                                               |
| **Ride Name**                              | The name of the ride requiring the waiver.                                                                                                                | Text                                 | Identifies which attraction the waiver applies to.                                                                                                |
| **Waiver Date**                            | The date the waiver was signed or approved.                                                                                                               | Date/Time                            | Tracks when the waiver was completed.                                                                                                             |
| **Visit Date**                             | The date of the park visit is associated with the waiver.                                                                                                 | Date                                 | Links the waiver to a specific park visit.                                                                                                        |
| **Waiver Status**                          | Indicates whether the waiver has been signed and approved.                                                                                                | Dropdown (Pending, Signed, Verified) | Tracks whether the guest has completed the required waiver.                                                                                       |
| **Guardian Contact**                       | The <code class="expression">space.vars.contact</code> <code class="expression">space.vars.entity</code> of the parent or guardian who signed the waiver. | Relationship: Contacts               | Captures who approved the waiver if the guest is a minor.                                                                                         |

Ensure that you have customized your fields so only the ones shown above are visible!

<div data-with-frame="true"><figure><img src="/files/bJ37DEtao8JMXGWej3Hq" alt=""><figcaption></figcaption></figure></div>

***

## How This Fits Into Agentic Workflows

Now that <code class="expression">space.vars.Theme\_park\_name</code> has Tickets, Concessions, and Ride Waiver <code class="expression">space.vars.objects</code>, <code class="expression">space.vars.Kizen\_company\_name</code> can begin connecting real processes to the Reyes family’s visit. Each <code class="expression">space.vars.object</code> captures a different part of the guest experience, from ticket purchases, to food purchases, to required ride permissions.

When Marcus’s Ticket <code class="expression">space.vars.entity</code> is created, it becomes the event that starts everything:

* A welcome email is sent
* Staff are assigned tasks
* Ride Waivers are sent out and wristbands are prepared
* A follow-up survey is scheduled

These <code class="expression">space.vars.workflows</code> and <code class="expression">space.vars.automations</code> work best when the underlying <code class="expression">space.vars.objects</code> and <code class="expression">space.vars.entities</code> are structured correctly, which is why defining these <code class="expression">space.vars.objects</code> is an essential step before [Creating Your First Workflow](/docs/kizen-basics/kizen-in-action/create-your-first-workflow-or-kizen-in-action).

***

## Object Capabilities By Role

{% columns %}
{% column %}

#### **Admins**

* Create and manage <code class="expression">space.vars.objects</code>
* Add or modify fields
* Control permissions and relationships between <code class="expression">space.vars.object</code>
* Prepare data structures for <code class="expression">space.vars.workflows</code>, <code class="expression">space.vars.dashboards</code>, and <code class="expression">space.vars.automations</code>
  {% endcolumn %}

{% column %}

#### **Technical Builders**

* Integrate external systems using webhooks or ETL pipelines to populate <code class="expression">space.vars.object</code>
* Leverage <code class="expression">space.vars.entity</code>-level APIs to sync tickets and guest data from other platforms
* Build scalable data models with future <code class="expression">space.vars.automations</code> in mind
  {% endcolumn %}
  {% endcolumns %}

***

## Tying It Back Into Your Industry

The three <code class="expression">space.vars.objects</code> you created for the Reyes family are specific to <code class="expression">space.vars.Theme\_park\_name</code>, but the same structure applies across many industries. <code class="expression">space.vars.objects</code> are how you model your business — they represent the data you track, the processes you automate, and the relationships your <code class="expression">space.vars.workflows</code> depend on.

Below are examples of how the concepts in this walkthrough translate into real-world use cases in Healthcare, Insurance, and Financial Services.

{% tabs %}
{% tab title="Insurance" %}
In insurance, <code class="expression">space.vars.objects</code> represent the structured data and processes that define underwriting, quoting, policy management, and claims.

Common <code class="expression">space.vars.objects</code> include:

* Applications
* Policies
* Vehicles, Properties, or Insured Assets
* Claims
* Beneficiaries
* Supporting Documents

Industry parallels to the <code class="expression">space.vars.Theme\_park\_name</code> setup:

* Tickets <code class="expression">space.vars.object</code> → Policy or Quote <code class="expression">space.vars.entities</code> linked to a <code class="expression">space.vars.contact</code> (applicant)
* Concessions <code class="expression">space.vars.object</code> → Transactions related to a policy, such as premium payments, service fees, or endorsements
* Ride Waivers <code class="expression">space.vars.object</code> → Signed disclosures, acknowledgments, or compliance documents required for coverage

<code class="expression">space.vars.objects</code> allow insurers to:

* Trigger <code class="expression">space.vars.workflows</code> when an application is submitted
* Route tasks to underwriting or claims teams
* Generate policy documents
* Automate renewal reminders
* Track multi-step processes with full audit history

Just like <code class="expression">space.vars.Theme\_park\_name</code> uses Tickets to start visit <code class="expression">space.vars.workflows</code>, an Application or Claim <code class="expression">space.vars.object</code> can trigger <code class="expression">space.vars.automations</code> that route work through the appropriate teams.
{% endtab %}

{% tab title="Healthcare" %}
In healthcare, <code class="expression">space.vars.objects</code> often represent operational or clinical data that is not tied to direct communication. While a patient might exist as a <code class="expression">space.vars.contact</code>, much of the supporting information is better stored in <code class="expression">space.vars.objects</code> such as:

* Appointments
* Care Plans
* Intake Forms
* Encounters / Visits
* Orders, labs, or imaging requests
* Authorizations or referrals

Industry parallels to the <code class="expression">space.vars.Theme\_park\_name</code> setup:

* Tickets <code class="expression">space.vars.object</code> → Appointment or Visit <code class="expression">space.vars.entities</code> associated with a patient
* Concessions <code class="expression">space.vars.object</code> → Billing or charge <code class="expression">space.vars.entities</code> for services, medications, or procedures
* Ride Waivers <code class="expression">space.vars.object</code> → Consent forms, treatment authorizations, or liability waivers signed before care

<code class="expression">space.vars.objects</code> allow healthcare teams to:

* Track appointment details and provider assignments
* Run <code class="expression">space.vars.automations</code> for check-in <code class="expression">space.vars.workflows</code>
* Trigger tasks for pre-visit requirements (forms, documentation, prep)
* Schedule follow-up activities or compliance reminders

Just like Tickets trigger <code class="expression">space.vars.workflows</code> at <code class="expression">space.vars.Theme\_park\_name</code>, a Visit <code class="expression">space.vars.entity</code> can trigger automated pre-visit instructions, reminders, and post-visit follow-ups.
{% endtab %}

{% tab title="Financial Services" %}
In financial services, <code class="expression">space.vars.objects</code> structure the core data that supports compliance, relationship management, and account operations.

Typical <code class="expression">space.vars.objects</code> include:

* Accounts
* Transactions
* Loan Applications
* Investments or Holdings
* KYC/AML Reviews
* Risk Profiles

Industry parallels to the <code class="expression">space.vars.Theme\_park\_name</code> setup:

* Tickets <code class="expression">space.vars.object</code>→ Account, loan, or investment application <code class="expression">space.vars.entities</code> tied to a client engagement
* Concessions <code class="expression">space.vars.object</code>→ Transaction <code class="expression">space.vars.entities</code> such as deposits, withdrawals, fees, or trade activity
* Ride Waivers <code class="expression">space.vars.object</code> → Signed disclosures, risk acknowledgments, or compliance documents required for financial services or investment activities

<code class="expression">space.vars.objects</code> help financial institutions:

* Run onboarding <code class="expression">space.vars.workflows</code> when a new account is created
* Validate required documentation
* Trigger advisor tasks
* Automate compliance reviews
* Track transaction-related activities

Just like Tickets drive visit preparation at <code class="expression">space.vars.Theme\_park\_name</code>, a Loan Application or New Account <code class="expression">space.vars.object</code> can drive automated review steps, outreach, reminders, and approval <code class="expression">space.vars.workflows</code>.
{% endtab %}
{% endtabs %}

***

## What’s Next?

Now that your Tickets, Concession, and Ride Waiver <code class="expression">space.vars.objects</code> are created, you’re ready to add real data to your workspace. In the next topic, [Create Your First Record](/docs/kizen-basics/kizen-in-action/create-your-first-record-or-kizen-basics), you’ll enter the following <code class="expression">space.vars.entities</code>:

* Marcus’s purchased ticket into the Tickets <code class="expression">space.vars.object</code>
* The Reyes family snack purchase in the Concessions <code class="expression">space.vars.object</code>
* Sofia’s ride waiver in the Ride Waiver <code class="expression">space.vars.object</code>

These <code class="expression">space.vars.entities</code> will prepare your workspace for building your first <code class="expression">space.vars.workflow</code>, where the system can trigger actions such as sending confirmations, creating tasks, or tracking guest activities.


# Create Your First Record | Kizen Basics

Learn how Records work in Kizen Objects. Create, structure, and connect Record data to power Agentic Workflows, Activities, reporting, and enterprise operations.

## **Overview**

{% hint style="warning" %}
**Caution:** This setup reflects Kizen's default configuration. Your administrator may have customized your layout, so columns or navigation may appear differently. Trial accounts may have limited features.
{% endhint %}

Now that you’ve created your <code class="expression">space.vars.objects</code>, it’s time to add your first <code class="expression">space.vars.entities</code> to them. In <code class="expression">space.vars.Kizen\_company\_name</code>, a [Record](/docs/concepts/objects/records) is a single entry of data inside an <code class="expression">space.vars.object</code>. It works similar to a row in a table, and stores all the information related to your <code class="expression">space.vars.object</code> grouping.&#x20;

For example, if your <code class="expression">space.vars.object</code> is a collection of ticket data, then a <code class="expression">space.vars.entity</code> would be all the data associated with one ticket or one purchase of tickets. The fields you define in your <code class="expression">space.vars.object</code> shape what data each Record contains.&#x20;

In this topic, we continue following the Reyes family on their first visit to <code class="expression">space.vars.Theme\_park\_name</code>. Your next step is to store Marcus’ Ticket purchase in the Tickets <code class="expression">space.vars.object</code>, then connect the ticket data back to the family's <code class="expression">space.vars.contact</code> <code class="expression">space.vars.entity</code>. You will:

* Learn to create **Ticket** <code class="expression">space.vars.object</code> Data
* Learn how fields determine what data each <code class="expression">space.vars.entity</code> can hold
* See how <code class="expression">space.vars.entity</code> structure supports Workflows, Activities, <code class="expression">space.vars.automations</code>, and reporting
* Apply those same steps to create data for the **Concessions** <code class="expression">space.vars.object</code> and **Ride Waiver** <code class="expression">space.vars.object</code>

These <code class="expression">space.vars.entities</code> become the foundation for all operational processes in <code class="expression">space.vars.Theme\_park\_name</code> and in your own business use cases.

### **Why This Matters**

Well-structured <code class="expression">space.vars.entities</code> impact nearly everything in <code class="expression">space.vars.Kizen\_company\_name</code>, including:

* **Accuracy:** Clear fields prevent missing or duplicated data, for example, a dropdown for Stage Status ensures staff select *Searching* rather than typing it freehand.
* **Agentic Workflows:** <code class="expression">space.vars.workflows</code> depend on consistent field values to trigger correctly, such as sending a notification only when Stage Status changes to *Located.*
* **Reporting:** <code class="expression">space.vars.dashboards</code> and filters rely on clean, meaningful fields, a mislabeled stage can cause requests to disappear from operational reports.
* **Scalability:** Good <code class="expression">space.vars.entity</code> structure grows with your operations without requiring rebuilds as processes expand.
* **Activities:** Logged or scheduled tasks pull data directly from <code class="expression">space.vars.entities</code>, so a missing <code class="expression">space.vars.contact</code> field means staff can't follow up automatically.

When your <code class="expression">space.vars.entities</code> are organized correctly, <code class="expression">space.vars.workflows</code> run without errors and your operational data tells a trustworthy story.

***

## **Before You Begin**

To complete this task, you must:

* Have permissions to create and edit <code class="expression">space.vars.entities</code> on the <code class="expression">space.vars.objects</code> you are modifying.
* Have completed:
  * [Create Your First Contact Record](/docs/kizen-basics/kizen-in-action/create-your-first-contact-record-or-kizen-basics)
  * [Create Your First Object](/docs/kizen-basics/kizen-in-action/create-your-first-object-or-kizen-basics)
* You should also have three <code class="expression">space.vars.objects</code> already created:
  * **Tickets** for Marcus' purchase
  * **Concessions** for future food and snack purchases
  * **Ride Waivers** to capture permission forms the family must sign.
* You should also have <code class="expression">space.vars.contact</code> <code class="expression">space.vars.entities</code> for all four family members

***

{% stepper %}
{% step %}

#### In the top navigation, select **Data** > **Custom Objects**

<div data-with-frame="true"><figure><img src="/files/MHcdATCf3tDttrSvu4rq" alt="" width="375"><figcaption></figcaption></figure></div>
{% endstep %}

{% step %}

#### Select the **Tickets** Object

<div data-with-frame="true"><figure><img src="/files/4rBngg4ehcfckNh3CXSk" alt="" width="563"><figcaption></figcaption></figure></div>

{% hint style="info" %}
**Note:** The table on the Tickets page will be empty because you haven’t added any <code class="expression">space.vars.entities</code> yet.
{% endhint %}
{% endstep %}

{% step %}

#### Create a new <code class="expression">space.vars.entity</code>

Select **NEW TICKET**

<div data-with-frame="true"><figure><img src="/files/UyjjATziF8LER3AtRCoV" alt="" width="563"><figcaption></figcaption></figure></div>

Enter the following:

* **Ticket Name:** Marcus Reyes - Flywheel Tickets
* **Owner:** Yourself
* **Ticket Value:** $42.99
* **Primary Contact:** Marcus Reyes
* **Visit Date:** 06/15
* **Number of Tickets:** 4
* **Admission Status:** Unused
* **Purchase Method:** Online

<div data-with-frame="true"><figure><img src="/files/tZWtj0QC6PagQ1JDRAiE" alt="" width="375"><figcaption></figcaption></figure></div>
{% endstep %}

{% step %}

#### Select **SAVE**

<div data-with-frame="true"><figure><img src="/files/Nag7yNmfKwn0FhOjHzBB" alt="" width="563"><figcaption></figcaption></figure></div>

You will now see the purchase for the tickets are saved in the <code class="expression">space.vars.object</code>.
{% endstep %}
{% endstepper %}

***

## **Apply What You’ve Learned**

Next, you’ll create a **Concession** <code class="expression">space.vars.entity</code> using the same steps you used for the **Ticket** <code class="expression">space.vars.entity</code> you set up earlier.

{% stepper %}
{% step %}

#### Navigate back to the **Objects** page

Select **BACK TO OBJECTS** to return to the <code class="expression">space.vars.objects</code> page.

<div data-with-frame="true"><figure><img src="/files/XQJt5T4WQbJPNsMWdQjv" alt="" width="563"><figcaption></figcaption></figure></div>
{% endstep %}

{% step %}

#### Select the **Concessions** Object

<div data-with-frame="true"><figure><img src="/files/tHrkvnZc6crCpxV2gVtm" alt="" width="563"><figcaption></figcaption></figure></div>

Selecting the <code class="expression">space.vars.object</code> will navigate you to the Concession <code class="expression">space.vars.entities</code> page.
{% endstep %}

{% step %}

#### Enter your Record data

Select **NEW CONCESSION** and enter the following information.

* **Concession Name:** Popcorn
* **Owner:** Yourself
* **Concession Value:** $7.50
* **Primary Contact Record:** Sofia Reyes
* **Quantity:** 1
* **Purchase Date:** 6/15 at 2:30pm
  {% endstep %}

{% step %}

#### Now, enter data for 3 other concessions

The data for the next three concessions can be found in the expanders below.

<div data-with-frame="true"><figure><img src="/files/OBHAUIpVzcPoVat1Ipvn" alt=""><figcaption></figcaption></figure></div>

<details>

<summary>Fried Dough</summary>

* **Concession Name:** Fried Dough
* **Owner:** Yourself
* **Concession Value:** $8.50
* **Primary Contact Record:** Sofia Reyes
* **Quantity:** 1
* **Purchase Date:** 6/15 at 2:30pm

</details>

<details>

<summary>Cotton Candy</summary>

* **Concession Name:** Cotton Candy
* **Owner:** Yourself
* **Concession Value:** $6.00
* **Primary Contact Record:** Caleb Reyes
* **Quantity:** 1
* **Purchase Date:** 6/15 at 2:30pm

</details>

<details>

<summary>Soda</summary>

* **Concession Name:** Soda
* **Owner:** Yourself
* **Concession Value:** $4.50
* **Primary Contact Record:** Caleb Reyes
* **Quantity:** 1
* **Purchase Date:** 6/15 at 2:30pm

</details>
{% endstep %}

{% step %}

#### Finally, Navigate to the **Ride Waiver** Object and create a Record

<div data-with-frame="true"><figure><img src="/files/HdJbQQmixTiYJ74Bw62I" alt="" width="375"><figcaption></figcaption></figure></div>

Enter the following Ride Waiver Record:

* **Ride Waiver Name:** Sofia Reyes Ride Waiver
* **Owner:** Yourself
* **Ride Name:** Thunder Loop
* **Guest Record:** Sofia Reyes
* **Waiver Date:** 6/15 at 10:00 am
* **Visit Date:** 6/15
* **Waiver Status:** Signed
* **Guardian Contact:** Marcus Reyes

{% endstep %}
{% endstepper %}

Your <code class="expression">space.vars.entity</code>s are now fully configured and connected.

***

## How Records Power Agentic Workflows

Well-structured <code class="expression">space.vars.entities</code> are the foundation of every <code class="expression">space.vars.workflow</code> and <code class="expression">space.vars.automation</code>. Now that your **Ticket, Concessions,** and **Ride Waiver** <code class="expression">space.vars.entities</code> exist, the system can begin connecting operational processes to the Reyes family’s visit.

These <code class="expression">space.vars.entities</code> can trigger automated actions such as:

* Sending Marcus a ticket purchase confirmation email
* Scheduling a reminder email the day before the family’s visit
* Logging concession purchases during the park visit
* Recording Sofia’s completed ride waiver for staff verification
* Updating <code class="expression">space.vars.timelines</code> and related <code class="expression">space.vars.entities</code> automatically as new activities occur

In the next lesson, you’ll build your first <code class="expression">space.vars.workflow</code>, using a Support Ticket <code class="expression">space.vars.entity</code> as the trigger event.

### **Record Capabilities by Role**

{% columns %}
{% column %}

#### **Admins**

* Create, edit, reorder, and delete fields
* Modify <code class="expression">space.vars.entity</code> layouts
* Configure relationships between <code class="expression">space.vars.objects</code>
* Manage permissions for <code class="expression">space.vars.entity</code> editing
  {% endcolumn %}

{% column %}

#### **Technical Builders**

* Use the <code class="expression">space.vars.entities</code> API to create, update, or retrieve <code class="expression">space.vars.entities</code> programmatically
* Build integrations using webhooks
* Map external data sources into <code class="expression">space.vars.objects</code>
* Create scalable schemas that support complex <code class="expression">space.vars.automations</code>
  {% endcolumn %}
  {% endcolumns %}

***

## Industry Applications

<code class="expression">space.vars.entities</code> aren’t just for theme parks. In other industries, the same concepts apply.

{% tabs %}
{% tab title="Insurance" %}
In insurance, <code class="expression">space.vars.entities</code> represent the individual entries stored within each <code class="expression">space.vars.object</code>. These <code class="expression">space.vars.entities</code> capture the specific details for applications, policies, claims, and other operational data used by insurers.

Common <code class="expression">space.vars.entities</code> include:

* Applications
* Policies
* Claims
* Insured items
* Beneficiaries

Industry parallels to the <code class="expression">space.vars.Theme\_park\_name</code> setup:

* **Guests Record** → Individual insured persons, dependents, or covered members
* **Ticket Record** → A policy or quote <code class="expression">space.vars.entity</code> created for a customer

These <code class="expression">space.vars.entities</code> allow insurers to:

* Track the details of individual applications, policies, and claims
* Capture information about insured assets or beneficiaries
* Maintain operational history for underwriting and servicing activities

Just as <code class="expression">space.vars.Theme\_park\_name</code> stores ticket purchases as <code class="expression">space.vars.entities</code>, insurance systems store applications, policies, and claims as <code class="expression">space.vars.entities</code> within their respective <code class="expression">space.vars.objects</code> to support business operations.
{% endtab %}

{% tab title="Healthcare" %}
In healthcare, <code class="expression">space.vars.entities</code> represent the individual entries stored within each <code class="expression">space.vars.object</code>. These <code class="expression">space.vars.entities</code> capture the details of patient interactions, clinical activities, and operational processes that occur throughout the care lifecycle.

Common <code class="expression">space.vars.entities</code> include:

* Appointments
* Visits or patient encounters
* Intake forms
* Care plans
* Orders or referrals

Industry parallels to the <code class="expression">space.vars.Theme\_park\_name</code> setup:

* **Guest Record** → A patient or individual receiving care
* **Ticket Record** → A visit or appointment <code class="expression">space.vars.entity</code> associated with that patient

These <code class="expression">space.vars.entities</code> allow healthcare organizations to:

* Track scheduled appointments and completed visits
* Capture patient intake information and care plans
* Manage referrals, orders, and follow-up care activities

Just as <code class="expression">space.vars.Theme\_park\_name</code> stores ticket purchases as <code class="expression">space.vars.entities</code>, healthcare systems store appointments, visits, and care activities as <code class="expression">space.vars.entities</code> within their respective <code class="expression">space.vars.objects</code> to manage patient care and operational <code class="expression">space.vars.workflows</code>.
{% endtab %}

{% tab title="Financial Services" %}
In financial services, <code class="expression">space.vars.entities</code> represent the individual entries stored within each <code class="expression">space.vars.object</code>. These <code class="expression">space.vars.entities</code> capture the details of client accounts, financial transactions, and operational processes that occur across banking, lending, and investment services.

Common <code class="expression">space.vars.entities</code> include:

* Accounts
* Transactions
* Loan applications
* KYC (Know Your Customer) checks
* Investment portfolios

Industry parallels to the <code class="expression">space.vars.Theme\_park\_name</code> setup:

* **Guest Record** → A client or account holder
* **Ticket Record** → A loan application, account opening, or investment request associated with that client

These <code class="expression">space.vars.entities</code> allow financial institutions to:

* Track client accounts and financial activity
* Capture loan applications and verification details
* Maintain compliance <code class="expression">space.vars.entities</code> such as KYC documentation
* Manage investment portfolios and related transactions

Just as <code class="expression">space.vars.Theme\_park\_name</code> stores ticket purchases as <code class="expression">space.vars.entities</code>, financial systems store accounts, transactions, and applications as <code class="expression">space.vars.entities</code> within their respective <code class="expression">space.vars.objects</code> to support financial operations and regulatory compliance.
{% endtab %}
{% endtabs %}

***

## **What’s Next**

Now that you’ve created your first <code class="expression">space.vars.entity</code>s, the next step is learning how to build a <code class="expression">space.vars.workflow</code>. In [Create Your First Workflow](/docs/kizen-basics/kizen-in-action/create-your-first-workflow-or-kizen-in-action)**,** you’ll create a <code class="expression">space.vars.workflow</code> <code class="expression">space.vars.object</code> that tracks operational processes and moves records through defined stages.

For example, when Sofia realizes she left her backpack near one of the rides, park staff create a Lost Item Request that moves through stages such as *Reported*, *Searching*, and *Resolved*, ensuring the right staff members take action at each step.


# Configure Your First Permission Groups | Kizen Basics

Learn how to create permission groups and apply object-level access in Kizen to control what your team can see, edit, and delete.

## Overview

In <code class="expression">space.vars.Kizen\_company\_name</code>, a **Permission Group** defines what your team members can see and do across your workspace, from top-level features like <code class="expression">space.vars.dashboards</code> and <code class="expression">space.vars.automations</code>, down to individual fields on a <code class="expression">space.vars.entity</code>. By default, a new <code class="expression">space.vars.object</code> is not accessible by any permission group except the Administrator. You must explicitly create a group and apply a permission set to it for your team to gain access.

In this walkthrough, you'll complete two tasks for <code class="expression">space.vars.Theme\_park\_name</code>:

* **Create a permission group** called *Flywheel Guest Staff* from the Settings area
* **Apply a permission set** to the Tickets <code class="expression">space.vars.object</code> so that group can access ticket <code class="expression">space.vars.entities</code>

### Why This Matters

Permission groups define who can interact with your data and how. Skipping this setup, or doing it after your team is already working, can cause issues such as:

* Team members accessing or editing <code class="expression">space.vars.entities</code> they shouldn't
* <code class="expression">space.vars.automations</code> routing work to users without the access needed to act on it
* Bulk actions like exporting or archiving being performed by unauthorized staff
* Sensitive field data being visible to the wrong people

A well-configured permission group protects your data and keeps your <code class="expression">space.vars.workflows</code> running as intended.

***

## Before You Begin

Before creating a permission group, you must have the following:

* **Admin access** to your <code class="expression">space.vars.Kizen\_company\_name</code> workspace. Only Admins can access the Settings area and manage permission groups.
* **Your Objects already created.** The Add Permission Group modal lists all existing <code class="expression">space.vars.objects</code>, including Tickets, Concessions, and Ride Waivers. Create these <code class="expression">space.vars.objects</code> before building your group. If you haven't created your <code class="expression">space.vars.objects</code> yet, see [Create Your First Object](/docs/kizen-basics/kizen-in-action/create-your-first-object-or-kizen-basics) before continuing.

{% hint style="info" %}
**Note:** You can create and configure a permission group before adding team members. Team members can be assigned to the group at any time.
{% endhint %}

***

## Business Settings Capabilities by Role

In <code class="expression">space.vars.Kizen\_company\_name</code>, only Admins can access and configure the Settings area. All other roles interact with the workspace within the boundaries Admins define.

| Capability                                                                    | Admin | Flywheel Guest Staff | Flywheel Concession Staff |
| ----------------------------------------------------------------------------- | ----- | -------------------- | ------------------------- |
| Create and manage permission groups                                           | ✅     | ❌                    | ❌                         |
| Configure <code class="expression">space.vars.object</code>-level permissions | ✅     | ❌                    | ❌                         |
| Access Settings area                                                          | ✅     | ❌                    | ❌                         |
| Access Tickets <code class="expression">space.vars.object</code>              | ✅     | ✅                    | ❌                         |
| Access Concessions <code class="expression">space.vars.object</code>          | ✅     | ❌                    | ✅                         |
| Edit associated <code class="expression">space.vars.entities</code>           | ✅     | Tickets only         | Concessions only          |
| Delete or archive <code class="expression">space.vars.entities</code>         | ✅     | ❌                    | ❌                         |
| Export <code class="expression">space.vars.entities</code> to CSV             | ✅     | ❌                    | ❌                         |

***

## Create the Flywheel Guest Staff Permission Group

{% stepper %}
{% step %}

#### In the top navigation, select **Settings**.

Select **Team, Roles, & Permissions**.
{% endstep %}

{% step %}

#### Select the **Permission Groups** tab.

Select **New Permission Group**.

<div data-with-frame="true"><figure><img src="/files/OrnZPLS9VjdbaNpvEGJI" alt="" width="563"><figcaption></figcaption></figure></div>

The **Add Permission Group** modal opens. This is where you'll name your group and configure its access to every area of <code class="expression">space.vars.Kizen\_company\_name</code>, including top-level features and each of your <code class="expression">space.vars.objects</code>.
{% endstep %}

{% step %}

#### Name Your Permission Group

At the top of the modal, enter *Flywheel Guest Staff*.

<div data-with-frame="true"><figure><img src="/files/B8NBtjNpqPghhJyEVcVg" alt="" width="563"><figcaption></figcaption></figure></div>
{% endstep %}

{% step %}

#### Turn on Feature-Level Permissions

The modal displays every area of <code class="expression">space.vars.Kizen\_company\_name</code> the group can access, each with a toggle to enable or disable access. Some areas, like Homepage, <code class="expression">space.vars.object</code> Settings, Notification Center, Teams, and App Marketplace, also include granular Permission Area controls with None, View, Create/Edit, and Delete/All options.

Enable only the following for Flywheel Guest Staff, and leave everything else **off**:

| Area                                                               | Setting |
| ------------------------------------------------------------------ | ------- |
| Custom <code class="expression">space.vars.object</code> - Tickets | On      |
| Teams - My Profile                                                 | On      |
| {% endstep %}                                                      |         |

{% step %}

#### Configure Permission Set

When you toggle **Custom Object - Tickets** on, the <code class="expression">space.vars.object</code> expands to reveal its full permission set. Configure the permissions as the following (there should be nothing past the **Create/Edit** level):

<div data-with-frame="true"><figure><img src="/files/wh6N6A2Z9MuMaQYjVhPf" alt="" width="563"><figcaption></figcaption></figure></div>

<div data-with-frame="true"><figure><img src="/files/Md6a2RQRUioR0konPBuA" alt="" width="563"><figcaption></figcaption></figure></div>
{% endstep %}

{% step %}

#### Save Permission Group

Once all settings are configured, select **SAVE.**
{% endstep %}
{% endstepper %}

Your new group will now appear on the Permission Groups tab alongside the default Admin group. The table displays a **Permission(s) Summary**, **User Count**, and **Role Count** for each group, making it easy to confirm the group was created correctly.

***

## Apply What You've Learned

Now that <code class="expression">space.vars.Theme\_park\_name</code> Guest Staff and the Tickets <code class="expression">space.vars.object</code> are configured, use the same steps to create a second permission group called Flywheel Concession Staff and configure its access to the Concessions <code class="expression">space.vars.object</code>.

### Create the Flywheel Concession Staff Permission Group

Follow the same steps in to create a new permission group. Name it *Flywheel Concession Staff* and enable only the following, leaving everything else off:

| Area                                                            | Setting |
| --------------------------------------------------------------- | ------- |
| <code class="expression">space.vars.object</code> - Concessions | On      |
| Teams - My Profile                                              | On      |

### Apply a Permission Set to the Concessions Object

Configure the following permission sets: **All Concessions Records, Record Overview, Perform Single Record Actions, Perform Bulk Actions, Individual Concessions Field Permissions, Concession Info**

Align it with the permission set of Flywheel Guest Staff; the difference is, you're configuring the **Custom Object - Concessions** instead of **Custom Object - Tickets,** so there will be some different permissions to configure.

Once complete, select **SAVE**.

When you're finished, it should look like this:

<div data-with-frame="true"><figure><img src="/files/EQXD2BSS9zujjtgzzOOb" alt="" width="563"><figcaption></figcaption></figure></div>

<div data-with-frame="true"><figure><img src="/files/24rB18GfXIeYdrz2BEMS" alt="" width="563"><figcaption></figcaption></figure></div>

***

## How This Fits Into Agentic Workflows

<code class="expression">space.vars.automations</code> in Kizen run independently of permission groups; they execute regardless of a user's access level. Where permissions matter is after the handoff: when an <code class="expression">space.vars.automation</code> assigns a <code class="expression">space.vars.entity</code> or task to a team member, their permission group determines what they can actually do with it. Getting this right before you build your <code class="expression">space.vars.automations</code> means the handoff works as intended every time.

For example:

* If a ticket purchase triggers an <code class="expression">space.vars.automation</code> that asks guest staff to verify admission status, they can update that field only if their permission group allows Create/Edit access on it
* If concession staff need to log a purchase mid-visit, their group must have Create New Concessions <code class="expression">space.vars.entities</code> enabled for the <code class="expression">space.vars.entity</code> to save correctly
* If concession staff shouldn't be able to export purchase data — protecting guest spending information — leaving Export to CSV set to None enforces that boundary automatically

Well-configured permission groups mean your <code class="expression">space.vars.automations</code> run without hitting access errors, and your data stays protected at every step.

***

## Tying It Back to Your Industry

Configuring permission groups is a requirement across regulated and operationally complex industries, and not just theme parks. Below are examples of how this setup translates into real-world use cases.

{% tabs %}
{% tab title="Insurance" %}
In **insurance**, separate permission groups ensure that claims staff, underwriters, and account managers each see only the <code class="expression">space.vars.objects</code> and fields relevant to their work.

* A Claims Adjuster group might have Create/Edit access on claim <code class="expression">space.vars.entities</code> they are associated with, but View-only access on all claims, which prevent cross-account edits
* An Underwriting group might have access to policy and application <code class="expression">space.vars.objects</code> but no access to claims data
* Sensitive fields like settlement amounts or fraud flags can be restricted to None for front-line staff while remaining visible to managers
  {% endtab %}

{% tab title="Healthcare" %}
In **healthcare**, permission groups protect patient <code class="expression">space.vars.entities</code> and ensure staff only access data relevant to their care responsibilities.

* An Intake Staff group might have access to intake form and appointment <code class="expression">space.vars.objects</code> but no visibility into care plan or billing <code class="expression">space.vars.entities</code>
* A Billing group might have access to charge and transaction <code class="expression">space.vars.objects</code> but no access to clinical documentation
* Field-level restrictions ensure sensitive data like diagnosis codes or treatment notes are visible only to clinical roles
  {% endtab %}

{% tab title="Financial Services" %}
In **financial services**, permission groups enforce the access boundaries required for compliance and client data protection.

* A Loan Officer group can be scoped to loan application <code class="expression">space.vars.objects</code>, with no access to investment or account management data
* A Compliance group might have View-only access across all <code class="expression">space.vars.objects</code> for audit purposes, without the ability to edit or delete any <code class="expression">space.vars.entities</code>
* Keeping Export to CSV disabled for most groups prevents unauthorized extraction of client financial data
  {% endtab %}
  {% endtabs %}

***

## What's Next

Now that your permission groups are created and your Tickets and Concessions <code class="expression">space.vars.objects</code> have permissions configured, you're ready to continue building out your workspace. [Create Your First Workflow](/docs/kizen-basics/kizen-in-action/create-your-first-workflow-or-kizen-in-action) to create an <code class="expression">space.vars.object</code> that goes through stages.


# Create Your First Workflow Object | Kizen Basics

Learn how to create a Workflow Object in Kizen to track operational processes through defined stages like Reported, Searching, and Resolved.

## Overview

{% hint style="warning" %}
**Caution:** This setup reflects Kizen's default configuration. Your administrator may have customized your layout, so columns or navigation may appear differently. Trial accounts may have limited features.
{% endhint %}

The Reyes family has been enjoying their visit to <code class="expression">space.vars.Theme\_park\_name</code>. Later in the day, Elena realizes she left her backpack near one of the roller coaster rides. Marcus reports the lost item to guest services, and a staff member creates a **Lost Item Request** to track the search.

As park staff investigate, the request moves internally through several stages: **Reported**, **Searching**, **Located,** **Resolved,** and **Not Found**.

Processes like this are managed in <code class="expression">space.vars.Kizen\_company\_name</code> using a **Workflow Object**.

A Workflow <code class="expression">space.vars.object</code> tracks how work progresses through a structured process. Instead of Records simply storing information, they move through defined **stages** that represent milestones in the lifecycle of a task.

In this walkthrough, you’ll create a **Lost Item Requests Workflow Object** that allows <code class="expression">space.vars.Theme\_park\_name</code> staff to track lost items reported by park visitors.

You will:

* Create a new <code class="expression">space.vars.object</code>
* Enable the **Contains Workflow** setting
* Configure stages that represent the lost item process

This Workflow <code class="expression">space.vars.object</code> will allow <code class="expression">space.vars.Theme\_park\_name</code> staff to track operational requests and ensure the right team members take action at the right time.

### Why This Matters

Workflows transform <code class="expression">space.vars.objects</code> from **data containers** into **operational processes**.

Without workflows, <code class="expression">space.vars.entities</code> only store information. With workflows enabled, Records move through a structured lifecycle that teams can track and manage.

Clear workflow design helps prevent issues such as:

* Staff losing visibility into operational tasks
* Requests becoming stuck without clear ownership
* <code class="expression">space.vars.automations</code> triggering at the wrong time
* Reporting failing to reflect real operational progress

A well-designed Workflow ensures that work moves consistently through your organization and that teams always understand **what stage a task is in**.

### Before You Begin

Before creating a Workflow <code class="expression">space.vars.object</code>, make sure you have the following:

* **Admin or Technical Builder permissions**
* A **Business workspace created**
* Access to **Data** > **Custom Objects** in your navigation

Workflow <code class="expression">space.vars.objects</code> are best used when work follows a **repeatable lifecycle**, such as service requests, approvals, onboarding processes, or operational tasks.

***

## Create Your Workflow

{% stepper %}
{% step %}

#### Navigate to **Objects**

<div data-with-frame="true"><figure><img src="/files/ACExlVTIaxGJtGuYB7KE" alt="" width="563"><figcaption></figcaption></figure></div>

1. In the top navigation, select **Data**.
2. Choose **Custom Objects**.

You will be taken to the <code class="expression">space.vars.objects</code> page.
{% endstep %}

{% step %}

#### Select **NEW OBJECT**

{% hint style="info" %}
**Note:** Admins and technical builders with the correct permissions will see the full creation interface.
{% endhint %}
{% endstep %}

{% step %}

#### Fill out the **General Settings** page

<div data-with-frame="true"><figure><img src="/files/RmzA9p1BSIzflgCPZuhw" alt="" width="563"><figcaption></figcaption></figure></div>

For this example, enter the following:

* **Object Name:** Lost Item Requests
  * This is the name of the Object that stores requests submitted by guests or staff when an item is reported missing.
* **Record (Entity) Name:** Lost Item Request
  * This is the name used to describe an individual Record in the Object.
* **Contains Workflow:** Enable
  * Enabling this setting converts the Object into a **Workflow Object**, allowing Records to move through defined stages that represent progress in the process.
* **Enable Quick Filters:** Disable
* **Object Description:** Tracks lost item reports submitted by guests and staff. Each request moves through stages such as Reported, Searching, and Resolved as staff investigate and recover items.
* **Enable Activities:** Enabled
* **Track Entity $ Value:** Disabled
  {% endstep %}

{% step %}

#### Select **SAVE & CONTINUE**

This will automatically save your <code class="expression">space.vars.object</code> and take you to the Stage Settings&#x20;
{% endstep %}

{% step %}

#### Configure Stage Settings

This is where you define the lifecycle stages that each **Lost Item Request** will move through as staff investigate the missing item.

<div data-with-frame="true"><figure><img src="/files/09mNxoDC9vWg4RJAkO3T" alt="" width="563"><figcaption></figcaption></figure></div>

At the top of the page, you will see two workflow configuration options.

#### % Chance to Close

**Disable** this setting.

This feature allows each pipeline stage to be assigned a probability value, which is used to forecast the likelihood of closing a deal. It's most commonly used in sales environments to predict revenue. Since we're setting up a ticket system to track lost items — not managing sales — this feature isn't needed and can safely be disabled without any impact to your workflow.

When the "Please Confirm Modification" dialog appears, click **CONFIRM**. You won’t need the % Chance to Close setting for this example.

<div data-with-frame="true"><figure><img src="/files/UY5DhPjZLkhWF0YO52Sd" alt="" width="375"><figcaption></figcaption></figure></div>

#### Use AI to Update Stage %

Leave this setting **disabled**.

This feature allows the system to automatically adjust stage probability values based on historical workflow performance. Since the Lost Item Request process does not require forecasting, this setting is not needed for this example.
{% endstep %}

{% step %}

#### Add a Reported Stage

Next, add the **Reported** stage. This stage represents when a guest first reports a missing item.

<div data-with-frame="true"><figure><img src="/files/kANgU3YyxLVdy9FKIj2H" alt="" width="563"><figcaption></figcaption></figure></div>

In the **Stages** table:

* Locate **Stage 1** in the Stage Name field.
* Rename it to **Reported**.

Leave the default stage values.

* **Stage Status:** Open
  {% endstep %}

{% step %}

#### Add a Searching Stage

This stage indicates that park staff are actively searching for the item.

<div data-with-frame="true"><figure><img src="/files/gVSbYWj2D40bBwO0Vj6N" alt="" width="563"><figcaption></figcaption></figure></div>

Select **+ ADD STAGE**.

Enter the following values:

* **Stage Name:** Searching
* **Stage Status:** Open

<div data-with-frame="true"><figure><img src="/files/8TxkWyrlZHwVVD0h18hm" alt="" width="563"><figcaption></figcaption></figure></div>
{% endstep %}

{% step %}

#### Add a Located Stage

This stage indicates that the missing item has been found but has not yet been returned to the guest.

Select **+ ADD STAGE** again.

Enter the following values:

* **Stage Name:** Located
* **Stage Status:** Open

<div data-with-frame="true"><figure><img src="/files/TOf0TPsn4fWIPH43Fg0C" alt=""><figcaption></figcaption></figure></div>
{% endstep %}

{% step %}

#### Add a Resolved Stage

This stage represents when the item has been successfully returned to the guest or the request has been completed.

Select **+ ADD STAGE**

Enter the following values:

* **Stage Name:** Resolved
* **Stage Status:** Won

<div data-with-frame="true"><figure><img src="/files/G2LI9ZmjlEGGCSEoFZgE" alt="" width="563"><figcaption></figcaption></figure></div>
{% endstep %}

{% step %}

#### Add a Not Found Stage

This stage represents when the item hasn't been found, and the loss is considered permanent.

* Select **+ ADD STAGE** one more time.
* Enter the following values:
  * **Stage Name:** Not Found
  * **Stage Status:** Lost

<div data-with-frame="true"><figure><img src="/files/fJgQ98Lk1URLUjeJ1dLL" alt="" width="563"><figcaption></figcaption></figure></div>
{% endstep %}

{% step %}

#### Review Your Workflow

Make sure the stages appear in the following order:

1. **Reported**
2. **Searching**
3. **Located**
4. **Resolved**
5. **Not Found**

<div data-with-frame="true"><figure><img src="/files/ZuOklpzkMMCvSO7DnfnN" alt="" width="563"><figcaption></figcaption></figure></div>

You can reorder stages by dragging the **six-dot handle** on the left side of each stage row. The order determines how the workflow appears in **Board View** and how progress is tracked in reports. Learn more about Board View with [Moving Through Your Workflow](/docs/kizen-basics/kizen-in-action/move-through-your-workflow-or-kizen-basics).

Select **SAVE & CONTINUE** in the upper-right corner.

{% hint style="info" %}
**Note**: The **Reasons Lost** and **Reasons Disqualified** sections will remain unavailable unless you add a stage with the **Lost** or **Disqualified** status.
{% endhint %}
{% endstep %}
{% endstepper %}

You will then move to **Step 3: Related Objects**, where you can define relationships between the Lost Item Requests Object and other Objects in your workspace. For this example to work correctly, configure the following settings before moving on:

* **Team Associations**
  * Set *Where does this object get its team associations?* to **Direct**
* **Primary Relationships** Under *This Object has Primary Relationships*, add a related object with the following settings:
  * **Related Object:** Contacts
  * **Relationship Type:** Many-to-One
  * **Relationship Name:** Primary Contact Record
  * **Reverse Relationship Name:** Related Lost Item Records
  * **Share Timeline To Related:** On
  * **Share Timeline From Related:** On

All other toggles (**Share Lead Sources To Related**, **Share Lead Sources From Related**, **Suppress Related Field**) should remain turned off.

You have now setup a Workflow object. For more information on how to set up your other object settings, see [Create Your First Object](/docs/kizen-basics/kizen-in-action/create-your-first-object-or-kizen-basics).

***

## How This Fits Into Agentic Workflows

Object Workflows define **how work progresses**, while Agentic Workflows **define what happens when that work progresses**. For example:

* When a **Lost Item Request** moves to **Reported**:
  * Guest services staff are notified
  * A task is assigned to park operations
* When the request moves to **Located**:
  * Staff are prompted to contact the guest
  * A pickup location can be arranged
* When the request moves to **Resolved**:
  * The request is archived
  * A follow-up message can be sent confirming the item was returned

These <code class="expression">space.vars.automations</code> rely on **stage changes**, which is why creating a workflow is an essential step in managing operational processes.

***

## Workflow Capabilities by Role

{% columns %}
{% column %}

#### Admins

* Create and manage Workflow <code class="expression">space.vars.objects</code>
* Define stages and lifecycle structures
* Configure permissions and access controls
* Design operational processes used across the organization
  {% endcolumn %}

{% column %}

#### Technical Builders

* Integrate external systems that create or update workflow Records
* Trigger <code class="expression">space.vars.automations</code> when Records change stage
* Use APIs to manage workflow-enabled Objects programmatically
* Build scalable workflow pipelines that support operational <code class="expression">space.vars.automations</code>
  {% endcolumn %}
  {% endcolumns %}

***

## Tying It Back Into Your Industry

The **Lost Item Request Workflow** at <code class="expression">space.vars.Theme\_park\_name</code> is just one example of how organizations use workflows to manage operational processes. The same structure appears across many industries.

{% tabs %}
{% tab title="Insurance" %}
In insurance, workflows are frequently used to manage the lifecycle of a claim. When a policyholder reports an incident, the claim must move through several stages as it is reviewed and processed by different teams.

A typical claim workflow might look like:

Claim Submitted → Investigation → Documentation Review → Approved → Closed

Each stage represents a specific step in the claims process.

For example:

* **Claim Submitted:** A policyholder reports an incident, such as a car accident or property damage. A claim record is created in the system.
* **Investigation:** Claims adjusters review the incident, assess damages, and determine coverage eligibility.
* **Documentation Review:** Supporting materials such as photos, estimates, and statements are collected and verified.
* **Approved:** The insurer confirms the claim is valid and authorizes payment.
* **Closed:** Payment is issued and the claim is finalized.

As the claim moves through these stages, the system can trigger automated actions such as assigning adjusters, requesting documentation, notifying customers of updates, or initiating payment processing.

Just like the Lost Item Request workflow tracks the progress of a search at <code class="expression">space.vars.Theme\_park\_name</code>, a Claims Workflow tracks the progress of an insurance investigation from the moment it is reported until it is resolved.
{% endtab %}

{% tab title="Healthcare" %}
In healthcare, workflows are frequently used to manage the lifecycle of a patient referral. When a provider refers a patient to a specialist, the request must move through several stages as it is reviewed, verified, and scheduled by different team members.

A typical referral workflow might look like:

Referral Received → Insurance Verified → Appointment Scheduled → Visit Completed → Follow-Up Sent

Each stage represents a specific step in the referral process.

For example:

* **Referral Received:** A provider submits a referral for a patient to see a specialist. A referral record is created in the system.
* **Insurance Verified:** The administrative team confirms the patient's coverage and obtains any necessary authorizations.
* **Appointment Scheduled:** The specialist's office confirms availability and books the patient's appointment.
* **Visit Completed:** The patient attends the appointment and the specialist submits their notes back to the referring provider.
* **Follow-Up Sent:** The care team reviews the outcome and sends any follow-up instructions or next steps to the patient.

As the referral moves through these stages, the system can trigger automated actions such as notifying the patient of their appointment, alerting staff when authorization is still pending, or sending follow-up communications once the visit is complete.

Just like the Lost Item Request workflow tracks the progress of a search at <code class="expression">space.vars.Theme\_park\_name</code>, a Referral Workflow tracks the progress of a patient referral from the moment it is submitted until care is complete.
{% endtab %}

{% tab title="Financial Services" %}
In financial services, workflows are frequently used to manage the lifecycle of a loan application. When a customer applies for a loan, the request must move through several stages as it is reviewed, evaluated, and approved by different teams.

A typical loan workflow might look like:

Application Received → Document Review → Risk Evaluation → Approved → Account Opened

Each stage represents a specific step in the lending process.

For example:

* **Application Received:** A customer submits a loan application. A record is created in the system and assigned to a lending coordinator.
* **Document Review:** The team collects and verifies supporting materials such as income statements, tax returns, and identification.
* **Risk Evaluation:** Underwriters assess the applicant's credit history, debt-to-income ratio, and overall financial profile.
* **Approved:** The institution confirms the loan terms and the customer accepts the offer.
* **Account Opened:** Funds are disbursed and the loan account is activated.

As the application moves through these stages, the system can trigger automated actions such as requesting missing documents, notifying the applicant of their status, alerting compliance teams for review, or initiating fund disbursement once approval is confirmed.

Just like the Lost Item Request workflow tracks the progress of a search at <code class="expression">space.vars.Theme\_park\_name</code>, a Loan Application Workflow tracks the progress of a lending request from the moment it is submitted until funds are in the customer's hands.
{% endtab %}
{% endtabs %}

***

## What’s Next?

Now that your **Lost Item Requests** Workflow <code class="expression">space.vars.object</code> is created, you’re ready to begin adding real requests. In the next topic, [Modify Your Workflow](/docs/kizen-basics/kizen-in-action/move-through-your-workflow-or-kizen-basics) you’ll move the **Lost Item Request Record** for Sofia’s backpack through stages.&#x20;


# Move Through Your Workflow | Kizen Basics

Learn how to update existing Records in Kizen and understand how changes impact Workflow Objects and Agentic Workflows.

To modify Records, you must:

* Be an **Admin** or **Technical Builder** with record edit permissions
* Have completed:
  * **Create Your First Contact Record**
  * **Create Your First Custom Object**
  * **Create Your First Record**

You should already have:

* Three Guest Records: **Elena, Sofia, and Caleb**
* One Ticket Record linked to **Marcus**

## Overview

Earlier, Marcus reported Sofia’s missing backpack to guest services, and a staff member created a **Lost Item Request Record** to track the search. Because the **Lost Item Requests Object** is configured as a **Workflow Object**, the request does not remain static. Instead, it moves through stages as the investigation progresses:&#x20;

<p align="center">Reported → Searching → Located → Resolved</p>

<p align="center">or</p>

<p align="center">Reported → Searching → Not Found</p>

Each stage represents a step in the operational process. As park staff work on the request, they update the **stage** to reflect the current status. In this walkthrough, you’ll learn how to **move a Record through workflow stages**, allowing your team to track progress and trigger <code class="expression">space.vars.automations</code> as work advances.

### Why This Matters

Workflow stages are what turn a Record into **a trackable operational process**.

Updating a Record’s stage allows teams to:

* Track progress in real time
* Trigger a<code class="expression">space.vars.automations</code> when work advances
* Maintain visibility into operational tasks
* Generate accurate reports on workflow activity

Without updating stages, workflows cannot accurately reflect the status of work across your organization.

### Before You Begin

Before moving a Record through workflow stages, make sure you have the following:

* The **Lost Item Requests Workflow Object** has been created (see [Create Your First Workflow](https://d91da5062c56835d5b5956382d755d80.claudemcpcontent.com/mcp_apps?connect-src=https%3A%2F%2Fesm.sh+https%3A%2F%2Fcdnjs.cloudflare.com\&resource-src=https%3A%2F%2Fesm.sh+https%3A%2F%2Fcdnjs.cloudflare.com+https%3A%2F%2Fcdn.jsdelivr.net+https%3A%2F%2Funpkg.com+https%3A%2F%2Fassets.claude.ai\&dev=true#))
* Workflow stages configured
* A **Lost Item Request Record** already exists

If you have not created a Record yet, complete the steps in [Create Your First Record](/docs/kizen-basics/kizen-in-action/create-your-first-record-or-kizen-basics) before continuing.

***

## Move Through Your Workflow

{% stepper %}
{% step %}

#### Go to the Lost Item Request Workflow Object

1. In the top navigation, select **Data**.
2. Choose **Custom Objects**.
3. Select **Lost Item Request** under the Entity Name Column.

<div data-with-frame="true"><figure><img src="/files/AdITAOwDniEKZVgdtuUK" alt="" width="563"><figcaption></figcaption></figure></div>

The Records table will be empty as no **Lost Item Requests** have been created yet.&#x20;
{% endstep %}

{% step %}

#### Create Lost Item Record for Sofia's Backpack

In the upper-right corner, select **NEW LOST ITEM REQUEST**.

<div data-with-frame="true"><figure><img src="/files/XzIRUGiwp5GSJggNk27r" alt="" width="563"><figcaption></figcaption></figure></div>

The **Add Lost Item Request** window will appear. Complete the Lost Item Request Information by filling out the following fields:

* **Lost Item Request Name:** Sofia's Backpack
  * This field serves as the primary identifier for the request.
* **Stage:** Reported
  * This stage indicates that the guest has reported the missing item and staff have begun tracking the request.

**Estimated Close Date (Optional):** *Blank*

* If desired, enter an expected date for resolving the request.
* For this example, leave this field blank
  {% endstep %}

{% step %}

#### Find the Stages Workflow&#x20;

To move the request forward in the workflow:

1. Open the **Lost Item Request Record**.

<div data-with-frame="true"><figure><img src="/files/0tvGBRHobAjSClx3K4L5" alt="" width="563"><figcaption></figcaption></figure></div>

2. Locate the **Stage field** in the Record details.

<div data-with-frame="true"><figure><img src="/files/ao7p5Of5Oxf9Z05k8zrH" alt="" width="563"><figcaption></figcaption></figure></div>

2. Select the **Stage dropdown menu**.

<div data-with-frame="true"><figure><img src="/files/2LNoK2a7TWkgiU607JDz" alt="" width="563"><figcaption></figcaption></figure></div>
{% endstep %}

{% step %}

#### Park staff begin investigating the missing backpack

Update the **Stage field** to: **Searching**

This stage indicates that staff are actively looking for the lost item. Once the stage is updated, the workflow now reflects that the investigation is in progress.
{% endstep %}

{% step %}

#### Staff locate Sofia's Backpack

After checking several rides and guest areas, staff locate Sofia’s backpack near the roller coaster exit, close to ferris wheel and a food stand.&#x20;

Update the **Stage field** again.

Select: **Located**

This stage indicates the item has been found but has not yet been returned to the guest.
{% endstep %}

{% step %}

#### Guest services contact family and they pickup backpack

Guest services contact Marcus and arranges for him to pick up the backpack.&#x20;

Once the item is returned, update the **Stage field** to: **Resolved**

This stage represents the completion of the request, and workflow now reflects that the lost item investigation has successfully concluded.
{% endstep %}
{% endstepper %}

***

## Moving Records in Board View

Workflow Objects also support **Board View**, which visually displays each stage as a column. You can find the **Board View** below.

<div data-with-frame="true"><figure><img src="/files/A4LBS63gKLlZGL4xKugG" alt="" width="563"><figcaption></figcaption></figure></div>

In Board View, you can move Records through stages by dragging and dropping them between columns. You can also arrange Records in columns to align with your team's priorities.

For example:

* Drag the Record from **Reported** to **Searching**
* Drag the Record from **Searching** to **Located**
* Drag the Record from **Located** to **Resolved**

This visual layout helps teams quickly understand the status of operational workflow.

<div data-with-frame="true"><figure><img src="/files/ycCHOEasiuxT8D45niUE" alt="" width="563"><figcaption></figcaption></figure></div>

***

## How This Fits Into Agentic Workflows

Stage changes are one of the most common triggers used in <code class="expression">space.vars.automations</code>.

For example:

* When a request moves to **Searching**:
  * Staff are notified that a lost item investigation has begun
  * A task can be assigned to the park operations team
* When a request moves to **Located**:
  * Guest services can be prompted to contact the guest
* When a request moves to **Resolved**:
  * A confirmation message can be sent
  * The request can be archived

Because <code class="expression">space.vars.automations</code> respond to stage changes, updating workflow stages is essential for keeping operational processes moving.

***

## Workflow Capabilities by Role

{% columns %}
{% column %}

#### Admins

* Design workflow pipelines
* Configure stages and lifecycle structures
* Monitor workflow performance across teams
  {% endcolumn %}

{% column %}

#### Technical Builders

* Update workflow stages using APIs
* Trigger <code class="expression">space.vars.automations</code> when Records move between stages
* Integrate external systems that create or update workflow Records
  {% endcolumn %}
  {% endcolumns %}

***

## Tying It Back Into Your Industry

Moving Records through workflow stages is a common operational pattern across industries.

{% tabs %}
{% tab title="Insurance" %}
In insurance, workflows are frequently used to manage the lifecycle of a **claim**. When a policyholder reports an incident, the claim must move through several stages as it is reviewed and processed by different teams.

A typical claim workflow might look like:

Claim Submitted → Investigation → Approved → Closed

Each stage represents a specific step in the claims process.

For example:

* **Claim Submitted:** A policyholder reports an incident, such as a car accident or property damage. A claim record is created in the system.
* **Investigation:** Claims adjusters review documentation, assess damages, and determine coverage eligibility.
* **Approved:** The insurer confirms the claim is valid and authorizes payment.
* **Closed:** Payment is issued and the claim is finalized.

As the claim moves through these stages, the system can trigger automated actions such as assigning adjusters, requesting documentation, notifying customers of updates, or initiating payment processing.

Just like the **Lost Item Request** workflow tracks the progress of a search at Flywheel Adventure Park, a **Claims Workflow** tracks the progress of an insurance investigation from the moment it is reported until it is resolved.
{% endtab %}

{% tab title="Healthcare" %}
Healthcare organizations often rely on workflows to manage **patient visits and care coordination**.

For example, an appointment or care request may move through stages such as:

Appointment Requested → Scheduled → Checked In → Completed

Each stage reflects the patient’s progress through the healthcare process.

For example:

* **Appointment Requested:** A patient requests a visit through a patient portal or by calling the clinic.
* **Scheduled:** The appointment is confirmed and assigned to a provider.
* **Checked In:** The patient arrives at the clinic and begins the visit process.
* **Completed:** The visit is finished and medical notes are recorded.

As records move through these stages, the system can automatically send reminders, notify staff, update patient records, and trigger billing workflows.

Just as the Flywheel team updates the stage of a **Lost Item Request**, healthcare teams update appointment or care records to reflect the patient’s progress through the care process.
{% endtab %}

{% tab title="Financial Services" %}
In financial services, workflows are commonly used to manage processes such as **loan applications, account openings, and compliance reviews**.

A loan application workflow might include stages such as:

Application Received → Document Review → Risk Evaluation → Approved

Each stage represents a step in evaluating the applicant and determining whether the loan can be issued.

For example:

* **Application Received:** A customer submits an application for a loan or credit product.
* **Document Review:** Staff verify financial documents, identification, and supporting information.
* **Risk Evaluation:** Underwriters assess credit risk and determine eligibility.
* **Approved:** The loan is approved and the account is created.

As the record progresses through these stages, the system may automatically request documents, notify reviewers, update risk assessments, and prepare final agreements.

Just as Flywheel staff move the **Lost Item Request** through stages while investigating the backpack, financial institutions move **loan or account records** through structured workflows to ensure each step of the process is completed correctly.
{% endtab %}
{% endtabs %}

***

## What’s Next?

Now that you know how to move Records through workflow stages, the next step is to **automate these processes**.

In the next topic, **Create Your First Agentic Workflow**, you’ll learn how stage changes can trigger actions such as:

* Sending notifications
* Assigning tasks
* Updating related Records

This allows your workflows to not only track progress, but also **coordinate work automatically across your organization.**

***


# Update A Contact Record | Kizen Basics

Learn how to modify a Contact Record by adding Custom Fields so you can connect guest Activity to operational events and power timely Agentic Workflows.

## Overview

While guest services helps Marcus recover Sofia’s backpack, the staff member reviewing the request noticed something missing from the <code class="expression">space.vars.contact</code> <code class="expression">space.vars.entity</code>.

The **Lost Item Request** is linked to Marcus’s <code class="expression">space.vars.contact</code> <code class="expression">space.vars.entity</code>, but the **visit date** for the Reyes family is missing. Without that information, staff cannot easily confirm when the family entered the park or trigger future <code class="expression">space.vars.automations</code> tied to guest visits.

To correct this, the staff member updates Marcus’s <code class="expression">space.vars.contact</code> <code class="expression">space.vars.entity</code> to include the **Visit Date**.

### Why This Step Matters

Capturing the **Visit Date** allows Flywheel Adventure Park to connect operational events, such as lost item requests, to the guest’s actual park visit.

This information will also be used in other tutorials when creating <code class="expression">space.vars.automations</code> that respond to guest activity.

For example, <code class="expression">space.vars.automations</code> could:

* Send reminders before a guest’s visit
* Assign operational tasks to park staff
* Send follow-up messages after a visit

Accurate record data ensures that these <code class="expression">space.vars.automations</code> run at the correct time.

### Before You Begin

Before updating Marcus’s <code class="expression">space.vars.contact</code> <code class="expression">space.vars.entity</code>, make sure you have:

* Permission to edit <code class="expression">space.vars.contacts</code> and create <code class="expression">space.vars.fields</code>
* Access to **Data** > **Contacts**
* A <code class="expression">space.vars.contact</code> <code class="expression">space.vars.entity</code> for Marcus already created (see [Create Your First Record](/docs/kizen-basics/kizen-in-action/create-your-first-record-or-kizen-basics))

***

## Update a Contact Record

{% stepper %}
{% step %}

#### Open the Contact Columns Editor

1. Navigate from **Data** > **Contacts**.
2. Locate the **Edit Columns** icon on the right side of the table header and select **Edit Columns**.

<div data-with-frame="true"><figure><img src="/files/msGHxeZMUqw6gE9lHbWo" alt="" width="563"><figcaption></figcaption></figure></div>

This opens the **Edit My Columns** configuration screen.
{% endstep %}

{% step %}

#### Open Object Field Settings

<div data-with-frame="true"><figure><img src="/files/qq9C80wcL6ezTHOrvwMY" alt="" width="563"><figcaption></figcaption></figure></div>

1. In the **Edit My Columns** screen, scroll to the bottom of the **Available Columns** section.
2. Select **Customize Fields**.

This opens the **Editing Object – Contacts** configuration page

{% endstep %}

{% step %}

#### Create the Visit Date Field

Select **+ Add New Field**.

<div data-with-frame="true"><figure><img src="/files/mnDRER0ar6Njjyp1xAD7" alt="" width="563"><figcaption></figcaption></figure></div>

In **Field Settings**, enter the following:

* **Field Name:** Visit Date
* **Category:** Contact Info
* **Description:** Visit Date for Guests
* Under **Choose Field Type**, select **Date**.&#x20;
* Select **SAVE**.

<div data-with-frame="true"><figure><img src="/files/nk5sOUgmH3asjK3wew1X" alt="" width="563"><figcaption></figcaption></figure></div>

The **Visit Date** field is now added to the <code class="expression">space.vars.contact</code> <code class="expression">space.vars.object</code>.
{% endstep %}

{% step %}

#### Add the Field to the Contact Table

After creating the field, it must be added to the visible table columns. After adding **Visit Date** field, you'll land on the **Custom Fields** <code class="expression">space.vars.contact</code> Settings page.

<div data-with-frame="true"><figure><img src="/files/FsfOvcjpTZC5tOsb3pYY" alt="" width="563"><figcaption></figcaption></figure></div>

Return to the **Edit My Columns** screen by selecting **Customize Layout**, then go to **Default Columns**.

<div data-with-frame="true"><figure><img src="/files/6qc9wdZ3Zh17uq7xNyge" alt="" width="563"><figcaption></figcaption></figure></div>

1. In **Available Columns**, locate **Visit Date**.
2. Drag **Visit Date** into the **Active Table Columns** section.

<div data-with-frame="true"><figure><img src="/files/oxhA4IMztKCCCJ1wOs3E" alt="" width="563"><figcaption></figcaption></figure></div>

3. Position the field where you want it to appear in the table, and drop it. There is a **column preview** where you can see how this information will be displayed.

<div data-with-frame="true"><figure><img src="/files/dGHINns2P2EVasX2mdxy" alt=""><figcaption></figcaption></figure></div>

4. Select **SAVE**.
   {% endstep %}
   {% endstepper %}

If you go back to the **Contacts** page, the **Visit Date** column now appears in the **Contacts table**, allowing staff to view and manage guest visit dates directly from the contact list.

<div data-with-frame="true"><figure><img src="/files/jfecLLlMWGC9SqFfcyO5" alt="" width="563"><figcaption></figcaption></figure></div>

This information can later be used in **Agentic Workflows or reporting**, such as identifying guests who visited on the same day an item was reported lost.

***

## What’s Next

Next, you can create an <code class="expression">space.vars.automation</code> that moves requests through stages. For example, when a request moves from **Reported** to **Searching**, an <code class="expression">space.vars.automation</code> could assign the task to the appropriate team or notify staff responsible for the ride area where the item may have been lost.

Learn how to create this process in [Create Your First Agentic Workflow](/docs/kizen-basics/kizen-in-action/create-your-first-agentic-workflow-or-kizen-basics) topic.


# Create Your First Agentic Workflow | Kizen Basics

Learn how to create Agentic Workflows in Kizen to send emails, trigger actions, and automate workflows using Contact Records and scheduled triggers.

## Overview

{% hint style="warning" %}
**Caution:** This setup reflects Kizen's default configuration. Your administrator may have customized your layout, so columns or navigation may appear differently. Trial accounts may have limited features.
{% endhint %}

In <code class="expression">space.vars.Kizen\_company\_name</code>, an <code class="expression">space.vars.automation</code> allows the platform to perform actions automatically when specific conditions are met. <code class="expression">space.vars.automations</code> connect your <code class="expression">space.vars.entities</code>, <code class="expression">space.vars.activities</code>, and communications, ensuring important tasks happen without manual effort.

In this walkthrough, you’ll create your first <code class="expression">space.vars.automation</code> using the Reyes family example. Because birthdays are stored in <code class="expression">space.vars.contact</code> <code class="expression">space.vars.entities</code>, <code class="expression">space.vars.Theme\_park\_name</code> can automatically send guests a Birthday Celebration email when their birthday occurs.

In this lesson, you will create an <code class="expression">space.vars.automation</code> that checks <code class="expression">space.vars.contact</code> birthdays and sends a birthday email automatically.

### Why This Matters

<code class="expression">space.vars.automations</code> help businesses reduce manual work while ensuring important processes run consistently.

Using <code class="expression">space.vars.automations</code> allows you to:

* Automatically send communications to customers
* Trigger tasks or follow-up actions based on data changes
* Maintain consistent customer engagement
* Ensure important processes run without human intervention

For example, the birthday message <code class="expression">space.vars.automation</code> ensures that every guest receives a personalized message without requiring staff to manually review <code class="expression">space.vars.contact</code> <code class="expression">space.vars.entities</code>. As your system grows, <code class="expression">space.vars.automations</code> help your organization operate more efficiently by connecting data, <code class="expression">space.vars.workflows</code>, and communications.

### Before You Begin

To complete this lesson, you must:

* Be an **Admin or Technical Builder** with permission to create <code class="expression">space.vars.automations</code>
* Have completed the previous lessons:
  * [Create Your First Contact Record](/docs/kizen-basics/kizen-in-action/create-your-first-contact-record-or-kizen-basics)
  * [Create Your First Object](/docs/kizen-basics/kizen-in-action/create-your-first-object-or-kizen-basics)
  * [Create Your First Record](/docs/kizen-basics/kizen-in-action/create-your-first-record-or-kizen-basics)

You should also have:

* <code class="expression">space.vars.contact</code> <code class="expression">space.vars.entities</code> created for **Marcus, Elena, Sofia, and Caleb Reyes**
* Birthday fields populated in each <code class="expression">space.vars.contact</code> <code class="expression">space.vars.entity</code>

In this section, you will create an <code class="expression">space.vars.automation</code> that sends a birthday email when a <code class="expression">space.vars.contact</code>’s birthday matches the current date.

This <code class="expression">space.vars.automation</code> uses three core components:

* [**Trigger**](/docs/concepts/agentic-workflows/agentic-workflow-triggers)**:** The event that starts the <code class="expression">space.vars.automation</code>. In this example, the trigger occurs when a <code class="expression">space.vars.contact</code>'s birthday matches the current day.
* **Condition (Topic Coming Soon):** Optional rules that branch execution based on criteria you define. In this example, a condition checks whether the <code class="expression">space.vars.contact</code>'s email field is not blank before proceeding to send the email.
* **Action (Topic Coming Soon):** The task performed by the <code class="expression">space.vars.automation</code>. In this lesson, the action sends a **Birthday Celebration email**.

If you would like to learn more about how <code class="expression">space.vars.automations</code> work, see [Agentic Workflows](/docs/concepts/agentic-workflows).

***

## Create Your First Automation

{% stepper %}
{% step %}

#### Navigate to Agentic Workflows

From the main navigation menu, select **Agentic Workflow**

<div data-with-frame="true"><figure><img src="/files/5zQ1dhfCzFYWTlk6R8lM" alt="" width="563"><figcaption></figcaption></figure></div>

This opens the <code class="expression">space.vars.automation</code> management page where you can view, edit, and create automated <code class="expression">space.vars.workflows</code> and folders.
{% endstep %}

{% step %}

#### Create a New Agentic Workflow

Select **NEW AGENTIC WORKFLOW**

<div data-with-frame="true"><figure><img src="/files/eJ2kjiSbLG4EROU8NDtV" alt="" width="563"><figcaption></figcaption></figure></div>

Enter the following information:

* **Agentic Workflow Name:** Birthday Celebration Email
* **Agentic Workflow Type:** <code class="expression">space.vars.entity</code>-based

{% hint style="info" %}
**Note:** We selected **Record-based** because this <code class="expression">space.vars.automation</code> needs to evaluate and react to data on individual <code class="expression">space.vars.contact</code> <code class="expression">space.vars.entities</code>.
{% endhint %}

<details>

<summary><strong>Learn More:</strong> <code class="expression">space.vars.entity</code>-based vs Global <code class="expression">space.vars.automations</code></summary>

When creating an <code class="expression">space.vars.automation</code>, you can choose between two types: **Record-based** and **Global.**

* **Record-based Automations** run when something happens to a specific <code class="expression">space.vars.entity</code> in your data, such as a <code class="expression">space.vars.contact</code>, Ticket, or other <code class="expression">space.vars.object</code>. A common example, sending a confirmation email when a ticket purchase is created.
* **Global Automations** run independently of a specific <code class="expression">space.vars.entity</code>. These are typically used for scheduled processes or external triggers, such as checking for birthdays each day or responding to a webhook from another system.

For more information, see Automations **(Coming Soon)**.

</details>

* **Agentic Workflow Object:** Contacts
* **Additional Error Notification Email:** *(Blank)*

{% hint style="info" %}
**Note:** Error notifications are automatically sent to the <code class="expression">space.vars.automation</code> creator. However, this field allows you to also add additional recipients, such as a team email or distribution list.
{% endhint %}

* **Folder:** *(Blank)*

{% hint style="info" %}
**Note:** If left blank, the <code class="expression">space.vars.automation</code> will be created in the **Root Folder**. You can also enter a folder name here to create a new folder and organize the **Agentic Workflow** within it.
{% endhint %}

<div data-with-frame="true"><figure><img src="/files/dZP5lgrjyZ6ArVNN4e9b" alt="" width="375"><figcaption></figcaption></figure></div>

Select **SAVE**
{% endstep %}

{% step %}

#### Configure the Trigger

Next, we are going to define the event that starts the <code class="expression">space.vars.automation</code>. To do this, first select **Click to add new trigger.**

<div data-with-frame="true"><figure><img src="/files/GEEOx5C2a4okPN3w8jQa" alt="" width="563"><figcaption></figcaption></figure></div>

When the Add Trigger modal appears, select **On or Around Date.**

<div data-with-frame="true"><figure><img src="/files/BS87JzHHeoGuKu6hjL3P" alt="" width="375"><figcaption></figcaption></figure></div>

Then, configure the trigger as follows:

* **Additional Description:** Automatically sends a birthday celebration email to <code class="expression">space.vars.contacts</code> on their birthday, offering a special discount and encouraging guests to visit <code class="expression">space.vars.Theme\_park\_name</code> again.
* **Choose Date Field:** Birthday
* **Time Offset:** Day(s) before, 2, at 7:00 AM
* **Allow Trigger to Activate Every Year:** Enabled

<div data-with-frame="true"><figure><img src="/files/CXKCBoxDoXz7MEx7YJdw" alt="" width="375"><figcaption></figcaption></figure></div>

This ensures that when the <code class="expression">space.vars.automation</code> runs each day, it checks the **Birthday field** in <code class="expression">space.vars.contact</code> <code class="expression">space.vars.entities</code> and sends an email **two days before the guest’s birthday**.

Select **SAVE**

<div data-with-frame="true"><figure><img src="/files/CyXb0V4zcIdYnaQbO8Ca" alt="" width="563"><figcaption></figcaption></figure></div>

Your trigger has been created.
{% endstep %}

{% step %}

#### Add an Agentic Workflow Condition

Now it's time to define the conditions that must be met when the trigger fires. To do this, select **+** and choose **Add Condition**.

{% hint style="info" %}
**Note:** This walkthrough skips the Variables step to keep the focus on the core components of a basic <code class="expression">space.vars.automation</code>. Variables become useful when you need to capture and reuse data across multiple steps in more complex <code class="expression">space.vars.workflows</code>. To learn more, see Agentic Workflow Variables. **(Topic Coming Soon)**
{% endhint %}

<div data-with-frame="true"><figure><img src="/files/SpEn7yo7PQEDgJ0bW6kJ" alt="" width="130"><figcaption></figcaption></figure></div>

The Add Condition Modal appears. Select and enter the following:

1. **Choose Condition Type:** Custom Filters
2. **Description:** This condition checks if there is an email for the contact.
3. **Condition Settings:** Fields/Email/Isn't Blank

<div data-with-frame="true"><figure><img src="/files/IhePILWT3oQdzmt91u3u" alt="" width="563"><figcaption></figcaption></figure></div>

Select **SAVE.**
{% endstep %}

{% step %}

#### Add the Agentic Workflow Action

Now it's time to define what the <code class="expression">space.vars.automation</code> should do when the trigger condition is met. To do this, select the **+** on the **Yes** condition and **Add Action.**

<div data-with-frame="true"><figure><img src="/files/KD2EEI4xSO7j4FKPxCOP" alt="" width="131"><figcaption></figcaption></figure></div>

In the **Message** section, choose **Send Email.**

<div data-with-frame="true"><figure><img src="/files/yaYmSrXImSgd36HTPVWB" alt="" width="375"><figcaption></figcaption></figure></div>

Then, configure the Action as follows:

* **Description:** Sends a birthday celebration email to the <code class="expression">space.vars.contact</code> when the <code class="expression">space.vars.automation</code> detects that their birthday has occurred.
* **CC Team Members:** None
* **Choose Email To Send:** Create a New Email Template

{% hint style="info" %}
**Note:** This will open the **Email Builder** in <code class="expression">space.vars.Kizen\_company\_name</code>. For this walkthrough, you do not need to modify the email design. Simply enter **“Happy Birthday Email”** in the Subject Line field, then select **Save & Close**.
{% endhint %}

* **Error Handling:** Continue and Notify on Failure

<div data-with-frame="true"><figure><img src="/files/Lf6O8QcbxptD9uGu5AEd" alt="" width="563"><figcaption></figcaption></figure></div>

Select **SAVE**

<div data-with-frame="true"><figure><img src="/files/0wlbrNrld9namFyijpah" alt=""><figcaption></figcaption></figure></div>
{% endstep %}

{% step %}

#### Activate the Agentic Workflow

Review the <code class="expression">space.vars.automation</code> configuration to ensure it is correct, then activate the <code class="expression">space.vars.automation</code> by turning on the **Active?** toggle.

<div data-with-frame="true"><figure><img src="/files/OhqPmSduVs0ZbGTZlMRZ" alt=""><figcaption></figcaption></figure></div>

Select **SAVE**
{% endstep %}
{% endstepper %}

Your birthday <code class="expression">space.vars.automation</code> is now live.

Each day, the system will check your <code class="expression">space.vars.contact</code> <code class="expression">space.vars.entities</code> and automatically send birthday emails to any guests celebrating two days before.

***

## Apply What You've Learned

Now that you understand how <code class="expression">space.vars.automations</code> work, you will create a second <code class="expression">space.vars.automation</code> using the Reyes family example.

As you know, Marcus recently purchased tickets for his family to visit <code class="expression">space.vars.Theme\_park\_name</code>. To help guests prepare for their visit, the park sends a reminder email the day before the scheduled trip. This message includes helpful information such as park hours, parking details, and what guests should bring for the day.

In this exercise, you will create an <code class="expression">space.vars.automation</code> that sends Marcus a reminder email one day before his park visit.

#### Your Task

Create a New <code class="expression">space.vars.automation</code> with the following:

* **Automation Name:** Visit Reminder Email
* **Automation Type:** <code class="expression">space.vars.entity</code>-based
* **Automation Object:** <code class="expression">space.vars.contacts</code>
* **Additional Error Notification Email:** *Blank*
* **Folder:** *Blank*
* **Trigger Type:** On or Around Date
* **Description:** Triggers when a Ticket <code class="expression">space.vars.entity</code>’s Visit Date is one day away, sending a reminder email to help guests prepare for their park visit.
* **Choose Date Field:** Visit Date
* **Time Offset:** Day(s) Before 1 at 10:00 AM
* **Allow Trigger to Activate Every Year:** Disabled
* **Action:** Send Email
* **Action Description:** Sends a reminder email to the guest one day before their scheduled park visit.
* **CC Team Members:** None
* **Choose Email To Send:** Create New email

{% hint style="info" %}
**Note:** This will open the **Email Builder** in <code class="expression">space.vars.Kizen\_company\_name</code>. For this walkthrough, you do not need to modify the email design. Simply enter **“Reminder Email”** in the Subject Line field, then select **SAVE & CLOSE**.
{% endhint %}

* **Error Handling:** Continue and Notify on Failure

Ensure that you enable your <code class="expression">space.vars.automation</code> and select **SAVE**.

<div data-with-frame="true"><figure><img src="/files/gG1GubBOirJl8oAuI8cj" alt="" width="563"><figcaption></figcaption></figure></div>

***

## How This Connects to Agentic Workflows

<code class="expression">space.vars.automations</code> allow the system to respond automatically when important events occur.

In the <code class="expression">space.vars.Theme\_park\_name</code> example, <code class="expression">space.vars.automations</code> can be used to:

* Send birthday messages to guests
* Send reminders before park visits
* Notify staff when ride waivers are submitted
* Send follow-up surveys after park visits

But as your organization grows, <code class="expression">space.vars.automations</code> help ensure more complex processes run consistently and without manual effort, such as:

* Updating a guest's loyalty tier when their visit count reaches a threshold
* Creating a follow-up task and assigning it to the operations team when a waiver is flagged for review
* Moving a group booking <code class="expression">space.vars.entity</code> to a new stage when a deposit payment is received
* Triggering a maintenance inspection <code class="expression">space.vars.entity</code> when a ride logs a specified number of cycles
* Updating seasonal pass status fields when an expiration date passes

To continue learning about all of the <code class="expression">space.vars.automation</code> functionality, see [Agentic Workflows](/docs/concepts/agentic-workflows).

***

## Agentic Workflow Capabilities by Role

{% columns %}
{% column %}

#### Admins

* Create and manage <code class="expression">space.vars.automations</code>
* Configure triggers and conditions
* Define automated actions
* Monitor <code class="expression">space.vars.automation</code> <code class="expression">space.vars.activity</code> and performance
  {% endcolumn %}

{% column %}

#### Technical Builders

* Create <code class="expression">space.vars.automations</code> using API triggers
* Connect <code class="expression">space.vars.automations</code> to external systems
* Trigger <code class="expression">space.vars.automations</code> through webhooks
* Integrate <code class="expression">space.vars.automations</code> into larger <code class="expression">space.vars.workflows</code>
  {% endcolumn %}
  {% endcolumns %}

***

## Tying It Back Into Your Industry

The <code class="expression">space.vars.automations</code> you created for the Reyes family are specific to <code class="expression">space.vars.Theme\_park\_name</code>, but the same concepts apply across many industries. <code class="expression">space.vars.automations</code> connect your data, processes, and communications, ensuring important actions occur automatically when specific conditions are met.

Below are examples of how <code class="expression">space.vars.automations</code> similar to the ones in this walkthrough are used in Insurance, Healthcare, and Financial Services.

{% tabs %}
{% tab title="Insurance" %}
In insurance, <code class="expression">space.vars.automations</code> connect policy, claims, and customer data with operational processes that support underwriting and policy servicing.

Common Automations include:

* Routing new claims to the appropriate adjuster based on claim type and region
* Moving a policy <code class="expression">space.vars.entity</code> to a pending review stage when an application is submitted
* Creating a document request <code class="expression">space.vars.entity</code> when required policy information is missing
* Updating a policy status field automatically when a renewal deadline passes

Just like <code class="expression">space.vars.Theme\_park\_name</code> automates operational processes to keep things running smoothly, insurers use <code class="expression">space.vars.automations</code> to move work through underwriting and policy servicing without manual handoffs.
{% endtab %}

{% tab title="Healthcare" %}
In healthcare, <code class="expression">space.vars.automations</code> help manage patient <code class="expression">space.vars.entities</code>, care coordination, and operational workflows.

Common Automations include:

* Assigning a care coordinator to a patient <code class="expression">space.vars.entity</code> when an intake form is completed
* Moving a patient <code class="expression">space.vars.entity</code> to a new care stage after a visit is logged
* Creating a follow-up task when a referral is submitted
* Updating a patient's status field when lab results are received

Just like <code class="expression">space.vars.Theme\_park\_name</code> uses <code class="expression">space.vars.automations</code> to keep guest and operational <code class="expression">space.vars.entities</code> current, healthcare organizations use <code class="expression">space.vars.automations</code> to ensure patient <code class="expression">space.vars.entities</code> reflect the right state at every stage of care.
{% endtab %}

{% tab title="Financial Services" %}
In financial services, <code class="expression">space.vars.automations</code> support account management, compliance, and client <code class="expression">space.vars.workflow</code> coordination.

Common Automations include:

* Routing loan applications to the appropriate review team based on loan type
* Updating an application status field when document verification is completed
* Creating a compliance task <code class="expression">space.vars.entity</code> when a required disclosure threshold is reached
* Assigning an advisor to a new account <code class="expression">space.vars.entity</code> when an investment request is submitted

Just as <code class="expression">space.vars.Theme\_park\_name</code> uses <code class="expression">space.vars.automations</code> to manage guest <code class="expression">space.vars.entities</code> and operational processes, financial institutions use <code class="expression">space.vars.automations</code> to move work through review, approval, and compliance <code class="expression">space.vars.workflows</code> reliably and at scale.
{% endtab %}
{% endtabs %}

***

## What’s Next

Now that you’ve created your first <code class="expression">space.vars.automations</code>, the next step is learning about [Scheduling Activities and Timeline](/docs/kizen-basics/kizen-in-action/scheduling-your-activity-and-timelines-or-kizen-in-action). In the next topic, you’ll learn how to Schedule <code class="expression">space.vars.activities</code> and track interactions directly on <code class="expression">space.vars.entities</code> using the <code class="expression">space.vars.timeline</code>.


# Create Your First Activity | Kizen Basics

Create your first Kizen Activity using a Purchase Tickets example. Define Activity settings, notifications, and calendar integration for your team.

## Overview

{% hint style="warning" %}
**Caution**: This setup reflects <code class="expression">space.vars.Kizen\_company\_name</code>'s default configuration. Your administrator may have customized your layout, so columns or navigation may appear differently. Trial accounts may have limited features.
{% endhint %}

Flywheel Adventure Park runs on recurring guest interactions: ticket purchases, waiver confirmations, gate check-ins, lost item reports, and concession sales. Staff need a consistent way to capture what happened, when, and who was involved.

<code class="expression">space.vars.activities</code> are how <code class="expression">space.vars.Kizen\_company\_name</code> structures those interactions. Before your team can log or schedule anything, an administrator must create the <code class="expression">space.vars.activity</code> by defining its name, what it tracks, and how it connects to your workspace.

In this guide, you will create a **Purchase Tickets** <code class="expression">space.vars.activity</code>, which staff will use to track ticket purchases like the one made by the Reyes family.

Once created, the <code class="expression">space.vars.activity</code> is available across <code class="expression">space.vars.Kizen\_company\_name</code>. Staff can schedule it ahead of a visit or log it on the spot, connecting it to <code class="expression">space.vars.contact</code> <code class="expression">space.vars.entities</code>, Tickets, and other <code class="expression">space.vars.entities</code> to power the <code class="expression">space.vars.timeline</code>, reporting, and downstream <code class="expression">space.vars.automations</code>.

### Why This Matters

<code class="expression">space.vars.activities</code> are the building blocks of how work gets tracked in <code class="expression">space.vars.Kizen\_company\_name</code>. Without a defined <code class="expression">space.vars.activity</code> type, there's no consistent way for staff to <code class="expression">space.vars.entity</code> that tickets were purchased, a waiver was confirmed, or a lost item was returned. Every team member would log these moments differently, and reporting would become unreliable.

By creating <code class="expression">space.vars.activities</code> thoughtfully, <code class="expression">space.vars.Theme\_park\_name</code> ensures that:

* Staff have a shared vocabulary for the work they do every day
* Each interaction is captured in a structured, searchable way
* Timelines give a complete picture of every guest's journey
* <code class="expression">space.vars.workflows</code> and <code class="expression">space.vars.automations</code> can trigger off real, consistent data
* Reports accurately reflect what's happening across the park

Creating your first <code class="expression">space.vars.activity</code> establishes the foundation that scheduling, logging, and <code class="expression">space.vars.automation</code> all depend on.

***

## Before You Begin

Before creating an <code class="expression">space.vars.activity</code>, make sure the following are in place:

* You have administrator permissions to create and configure <code class="expression">space.vars.activities</code>
* Your business workspace has been created and your business settings configured
* The <code class="expression">space.vars.objects</code> this <code class="expression">space.vars.activity</code> will associate with (such as Tickets and Contacts) have been created
* You've identified the team members who will schedule and log this <code class="expression">space.vars.activity</code>
* You understand the type of interaction this <code class="expression">space.vars.activity</code> should capture

Having these items ready ensures your <code class="expression">space.vars.activity</code> can be created and immediately connected to the rest of your workspace.

***

## Creating an Activity

{% stepper %}
{% step %}

#### Navigate to **Activities**

From the top navigation, select **Platform > Activities**.

The <code class="expression">space.vars.activities</code> page appears, showing any <code class="expression">space.vars.activities</code> that already exist in your workspace.
{% endstep %}

{% step %}

#### Create a **New Activity**

On the <code class="expression">space.vars.activities</code> page, select **NEW ACTIVITY** in the upper-right corner.

<div data-with-frame="true"><figure><img src="/files/shogQalMu750NsWlyHws" alt=""><figcaption></figcaption></figure></div>

An **Add Activity** modal appears.
{% endstep %}

{% step %}

#### Name Your Activity

In the **Activity Name** field, enter **Purchase Tickets**.

<div data-with-frame="true"><figure><img src="/files/NZguo6juA7QKvGkhYvzs" alt="" width="375"><figcaption></figcaption></figure></div>

Select **SAVE** to create the <code class="expression">space.vars.activity</code>.

The <code class="expression">space.vars.activity</code> Settings page appears, where you'll configure the details.
{% endstep %}

{% step %}

#### Confirm Your Activity Settings

At the top of the <code class="expression">space.vars.activity</code> Settings page, you'll see six tabs: **Activity Settings**, **Build**, **Team Sharing Settings**, **Advanced Rules**, **Scheduled/Logged**, and **Timeline**.

You'll start on the **Activity Settings** tab. Here, confirm the <code class="expression">space.vars.activity</code> name reads **Purchase Tickets**. The **API Name** field auto-fills as `purchase_tickets` and is used when referencing this <code class="expression">space.vars.activity</code> through integrations or the API.

<div data-with-frame="true"><figure><img src="/files/ePfdmbjMyMmuJfyeoBb4" alt="" width="563"><figcaption></figcaption></figure></div>
{% endstep %}

{% step %}

#### Add an Activity Description

In the **Activity Description** field, enter: **This is when customers purchase tickets**.

This description helps other admins and technical builders understand the purpose of the <code class="expression">space.vars.activity</code> when they encounter it later in <code class="expression">space.vars.workflows</code>, <code class="expression">space.vars.automations</code>, or reports.
{% endstep %}

{% step %}

#### Configure Your Activity&#x20;

**1. Set the Default Submission Action**

* Under **Default Submission Action**, leave the dropdown set to **None**.

**2. Configure Notifications**

* In the **Notifications** panel, you can notify team members by email or text each time this <code class="expression">space.vars.activity</code> is logged.
* For this first <code class="expression">space.vars.activity</code>, leave both **Notify Team Members via Email** and **Notify Team Members via Text** empty. You'll handle per-scheduled-<code class="expression">space.vars.activity</code> notifications (such as reminders to Marcus Reyes) when scheduling individual instances of this <code class="expression">space.vars.activity</code>.

**3. Configure Calendar Integration**

* In the **Calendar Integration** panel, leave **Create Events for Scheduled Activities** toggled off.
* When enabled, this setting sends a calendar invitation to the assigned team member whenever this <code class="expression">space.vars.activity</code> is scheduled. You can turn this on later if your team wants scheduled <code class="expression">space.vars.activities</code> to appear on their connected calendars.

**4. Save Your Activity**

* Your <code class="expression">space.vars.activity</code> is saved automatically as you configure it. You can now navigate back to the <code class="expression">space.vars.activities</code> page using **BACK TO ACTIVITIES** in the upper-left.
  {% endstep %}

{% step %}

### Save Your Activity

Your <code class="expression">space.vars.activity</code> is saved automatically as you configure it. You can now navigate back to the <code class="expression">space.vars.activities</code> page using **BACK TO ACTIVITIES** in the upper-left.
{% endstep %}
{% endstepper %}

The Purchase Tickets <code class="expression">space.vars.activity</code> now appears in your <code class="expression">space.vars.activities</code> list and is available across the workspace for scheduling and logging.

***

## Apply What You've Learned

Now that you've created one <code class="expression">space.vars.activity</code>, apply what you've learned. Create a second <code class="expression">space.vars.activity</code> using the same steps. This time, create a **Ride Waiver Submissions** <code class="expression">space.vars.activity</code> that Guest Services will use to track waiver completion for families visiting the park.

Use the information below to set it up.

**Activity Settings**

* **Activity Name**: *Ride Waiver Submissions*
* **API Name**: `ride_waiver_submissions` (auto-fills)
* **Activity Description**: Tracking Ride Waiver Submissions
* **Default Submission** Action: None

**Notifications**

* Notify Team Members via Email: Leave blank
* Notify Team Members via Text: Leave blank

**Calendar Integration**

* Create Events for Scheduled <code class="expression">space.vars.activities</code>: Off

When you've finished, both **Purchase Tickets** and **Ride Waiver Submissions** should appear in your <code class="expression">space.vars.activities</code> list, ready to be scheduled or logged.

***

## How This Fits Into Agentic Workflows

<code class="expression">space.vars.activities</code> are the raw material thar <code class="expression">space.vars.automations</code> act on. Once an <code class="expression">space.vars.activity</code> exists, it becomes available as a trigger, an action, and a data point across the platform.

In the <code class="expression">space.vars.Theme\_park\_name</code> example, the Purchase Tickets <code class="expression">space.vars.activity</code> you just created can be used to:

* Trigger an <code class="expression">space.vars.automation</code> that sends a purchase confirmation email to Marcus Reyes when tickets are logged for Sofia and Caleb
* Advance a guest-preparation <code class="expression">space.vars.workflow</code> once tickets are purchased, prompting the scheduling of Ride Waiver Confirmations
* Feed logged purchases into a sales dashboard showing daily ticket revenue and attendance projections
* Kick off a follow-up task for staff when a purchase includes add-ons that require additional setup
* Populate the <code class="expression">space.vars.timeline</code> on Marcus's <code class="expression">space.vars.contact</code> <code class="expression">space.vars.entity</code> so any staff member can see his purchase history at a glance

Creating the <code class="expression">space.vars.activity</code> is step one. Scheduling and logging it, and then connecting it to <code class="expression">space.vars.workflows</code> and <code class="expression">space.vars.automations</code>, is where operational value compounds.

***

## Create Activity Capabilities by Role

{% columns %}
{% column %}

### Admins

* Create new <code class="expression">space.vars.activity</code> types and configure their settings
* Define <code class="expression">space.vars.activity</code> descriptions, API names, and default submission actions
* Configure logging notifications and calendar integration
* Manage team sharing settings and advanced rules for each <code class="expression">space.vars.activity</code>
* Archive or delete <code class="expression">space.vars.activities</code> that are no longer in use
  {% endcolumn %}

{% column %}

### Technical Builders

* Reference <code class="expression">space.vars.activities</code> by API name in integrations and custom code
* Trigger <code class="expression">space.vars.automations</code> based on <code class="expression">space.vars.activity</code> scheduling or logging
* Build custom fields and forms on the Build tab to capture <code class="expression">space.vars.activity</code>-specific data
* Configure advanced rules to enforce required fields or conditional logic
* Connect logged <code class="expression">space.vars.activity</code> data to external systems and reporting tools
  {% endcolumn %}
  {% endcolumns %}

***

## Tying It Back Into Your Industry

At <code class="expression">space.vars.Theme\_park\_name</code>, creating a Purchase Tickets <code class="expression">space.vars.activity</code> establishes a consistent way to capture a recurring guest transaction. The same pattern, which involves defining a structured interaction type before tracking individual instances, applies across industries where repeatable transactions or touch points need to be captured reliably.

{% tabs %}
{% tab title="Insurance" %}
Creating a Purchase Tickets <code class="expression">space.vars.activity</code> is similar to defining standard transactional Activities in insurance.

For example:

* A Policy Purchase <code class="expression">space.vars.activity</code> used every time a new policy is bound
* A Premium Payment <code class="expression">space.vars.activity</code> used whenever a payment is received
* A Coverage Add-On <code class="expression">space.vars.activity</code> used when a rider is added to an existing policy

Just as <code class="expression">space.vars.Theme\_park\_name</code> standardizes how ticket purchases are tracked, insurance teams standardize how policy transactions are recorded.
{% endtab %}

{% tab title="Healthcare" %}
In healthcare, a defined <code class="expression">space.vars.activity</code> corresponds to a standard patient-encounter type.

For example:

* An Appointment Scheduled <code class="expression">space.vars.activity</code> used when a visit is booked
* A Co-Pay Collection <code class="expression">space.vars.activity</code> used at check-in
* A Prescription Fulfilled <code class="expression">space.vars.activity</code> used when medication is dispensed

These Activities ensure every patient transaction is captured the same way, regardless of which staff member handles it.
{% endtab %}

{% tab title="Financial Services" %}
In financial services, <code class="expression">space.vars.activities</code> map to recurring client transactions and service events.

For example:

* A New Account Opened <code class="expression">space.vars.activity</code> used during onboarding
* A Deposit Received <code class="expression">space.vars.activity</code> used for incoming funds
* A Trade Executed <code class="expression">space.vars.activity</code> used when an order is filled

Standardizing these <code class="expression">space.vars.activities</code> makes client service consistent and auditable, no matter who performs the work.
{% endtab %}
{% endtabs %}

***

## What's Next?

Next, you'll learn how to [Schedule an Activity](/docs/kizen-basics/kizen-in-action/scheduling-your-activity-and-timelines-or-kizen-in-action), using the <code class="expression">space.vars.activities</code> you just created, to plan interactions ahead of time, assign them to team members, and connect them to <code class="expression">space.vars.contacts</code>, Tickets, and other <code class="expression">space.vars.entities</code> across your workspace.


# Schedule Your Activity | Kizen Basics

Learn how to schedule Activities in Kizen and use timelines to plan and track future actions.

## **Overview**

{% hint style="warning" %}
**Caution:** This setup reflects Kizen's default configuration. Your administrator may have customized your layout, so columns or navigation may appear differently. Trial accounts may have limited features.
{% endhint %}

A day at <code class="expression">space.vars.Theme\_park\_name</code> is full of interactions—families calling to confirm arrival times, guests checking in at the gate, safety briefings before rides, and follow-up messages after their visit. For the Reyes family, this includes confirming Sofia and Caleb’s ride waivers and making sure Marcus receives the right reminders before they arrive.

Some interactions happen *in the moment* and need to be **logged**. Others must be planned ahead of time and need to be **scheduled** to ensure the day runs smoothly.

You should create a Scheduled <code class="expression">space.vars.activity</code> when an interaction hasn’t happened yet, such as confirming ride waivers before a visit. When Marcus Reyes purchased tickets for his children, Sofia and Caleb, <code class="expression">space.vars.Theme\_park\_name</code> schedules a **Ride Waiver Confirmation** <code class="expression">space.vars.activity</code>. This ensures Guest Services can verify waiver completion and prepare wristbands ahead of time, allowing the kids to head straight to the rides upon arrival.

A Scheduled <code class="expression">space.vars.activity</code> like this typically includes details such as:

* **Type:** Ride Waiver Confirmation
* **Date & Time:** Morning of the visit
* **Assigned To:** Guest Services staff member Jacob Mulligan
* **Notes:** “Confirm both children’s waivers. Prepare wristbands to speed up ride access. Link to ticket records.”
* **Contacts:** Sofia and Caleb Reyes

### **Why This Matters**

Keeping <code class="expression">space.vars.activities</code> up to date ensures that <code class="expression">space.vars.Theme\_park\_name</code> staff always know:

* What happened
* What’s planned
* Who handled each touchpoint
* Whether follow-ups are still pending

When <code class="expression">space.vars.activities</code> are logged and scheduled correctly, the guest experience feels seamless, even on the busiest weekends. This guide walks through how to schedule an <code class="expression">space.vars.activity</code> using the Reyes family’s visit as a simple, day-in-the-life example.

### Before You Begin

Before scheduling an <code class="expression">space.vars.activity</code>, make sure the following are in place:

* The Contact record exists for Marcus Reyes
* Sofia Reyes Ride Waiver and Caleb Reyes Ride Waiver <code class="expression">space.vars.entities</code> have been created
* The <code class="expression">space.vars.activity</code> type you plan to schedule (such as Ride Waiver Confirmation) is available
* The assigned team member exists in <code class="expression">space.vars.Kizen\_company\_name</code> and has the appropriate permissions
* You have permission to schedule <code class="expression">space.vars.activities</code> and send notifications

Having these items ready ensures <code class="expression">space.vars.activities</code> can be scheduled, assigned, and connected correctly to <code class="expression">space.vars.timelines</code> and <code class="expression">space.vars.workflows</code>.

***

## Scheduling an Activity

{% stepper %}
{% step %}

#### Navigate to **Contacts**

&#x20;From the top navigation, select **Data** > **Contacts**.

<div align="left" data-with-frame="true"><figure><img src="/files/GyTQkW7t53MrkBOJNhwC" alt="" width="375"><figcaption></figcaption></figure></div>
{% endstep %}

{% step %}

#### Select the Contact Record

On the **Contacts** page, select Marcus Reyes, as he is the person needing the Scheduled <code class="expression">space.vars.activity</code>.
{% endstep %}

{% step %}

#### Schedule an <code class="expression">space.vars.activity</code> on your Contact Record

On the Action panel in Marcus's <code class="expression">space.vars.contact</code> <code class="expression">space.vars.entity</code> select **SCHEDULE ACTIVITY**.&#x20;

<div align="left" data-with-frame="true"><figure><img src="/files/As8u0eJqvSjBbdVhfgPn" alt="" width="563"><figcaption></figcaption></figure></div>

A Schedule <code class="expression">space.vars.activity</code> modal appears.
{% endstep %}

{% step %}

#### Choose the Activity and fill out the fields

On the Schedule <code class="expression">space.vars.activities</code> modal, you can choose your <code class="expression">space.vars.activity</code> and fill out various fields.

Select **Ride Waiver Confirmation** from the Choose <code class="expression">space.vars.activity</code> dropdown (the topmost field).

<div align="center" data-with-frame="true"><figure><img src="/files/ExyICMeDXU9y5VvKhg1w" alt="" width="563"><figcaption></figcaption></figure></div>
{% endstep %}

{% step %}

#### Assign a Team Member

Assign the <code class="expression">space.vars.activity</code> to the team member. Under **Assign Team Member**, be sure to choose via a dropdown Jacob Mulligan, your trusty guest service staffer.&#x20;

{% hint style="info" %}
**Note**: Jacob Mulligan should be created for this step. If you don't see him, please read our [Configure Your Business](/docs/kizen-basics/kizen-in-action/configure-your-business-settings-or-kizen-basics) page.
{% endhint %}
{% endstep %}

{% step %}

#### Set Date and Time

* **Due Date:** Day of the visit (for our purposes, set it to two days ahead of the present date).
* **Time:** Morning (use 9:00 AM)
* **Why?** This ensures staff prepare waivers and wristbands before the family arrives.
  {% endstep %}

{% step %}

#### Add a Note

Add a note regarding the current Scheduled <code class="expression">space.vars.activity</code>: “Confirm both children’s waivers. Prepare wristbands to speed up ride access. Link to ticket <code class="expression">space.vars.entities</code>.”
{% endstep %}

{% step %}

#### Set your Associations

&#x20;Set associations for this Scheduled <code class="expression">space.vars.activity</code>.

* **Contacts** Contacts field is the person who needs to fill out this ride waiver (in this case, Marcus Reyes)
* **Concession:** *Blank*
* **Lost Item Requests:** *Blank*
* **Ride Waivers:** Sofia Reyes Ride Waiver
* **Tickets field:** This is connecting the waiver to a specific ticket (in this case, Marcus's purchase of Sofia's ticket). In the Tickets dropdown, select **Marcus Reyes - Flywheel Ticket**.

<div align="center" data-with-frame="true"><figure><img src="/files/fHc6n7hxzmFAs4kDfJnC" alt="" width="563"><figcaption></figcaption></figure></div>
{% endstep %}

{% step %}

#### Add Notifications

Select **+ADD NOTIFICATION**.

<div align="center" data-with-frame="true"><figure><img src="/files/VIYqWiWrS2qwSepb3ko0" alt="" width="563"><figcaption></figcaption></figure></div>

You'll want to remind Marcus of the waiver form is due a couple times before he comes with the family to <code class="expression">space.vars.Theme\_park\_name</code>. So you're going to create two notifications

* You can choose whether or not to send a text or an email. For our purposes, leave it as an email.
* In the dropdown where you see **Minute(s)**, change it to **Days(s)**. These indicate the timelines before the Activity is due. We want to give Marcus some time to sign the waivers!
* Set the first notification to **1 Day** and the second to **4 hours**.
  {% endstep %}

{% step %}

#### Select **SCHEDULE** to save

{% endstep %}
{% endstepper %}

Now you should see that the scheduled waiver confirmation appears on Marcus’s <code class="expression">space.vars.timeline</code> with the selected date and time, assigned staff member, activity details, related <code class="expression">space.vars.entities</code>, and any notes.

<div align="center" data-with-frame="true"><figure><img src="/files/C7bV2eZTfgWSD9JOlWvx" alt="" width="563"><figcaption></figcaption></figure></div>

***

## Apply What You've Learned

Now that you’ve scheduled one <code class="expression">space.vars.activity</code>, apply what you’ve learned. Schedule another <code class="expression">space.vars.activity</code> using the same steps and the Ride Waiver <code class="expression">space.vars.object</code>. This time, create the <code class="expression">space.vars.activity</code> for **Caleb’s waiver** instead of Sofia’s.

Use the information below to set it up.

**Activity Settings**

* **Activity:** Ride Waiver Submissions
* **Assignment Type:** Team Member
* **Assign Team Member:** Jacob Mulligan
* **Due Date:** Two days from today (visit date)
* **Time:** 9:00 AM
* **Notes:** Confirm both children’s waivers. Prepare wristbands to speed up ride access. Link to ticket <code class="expression">space.vars.entities</code>.

**Associations**

* **Contacts:** Marcus Reyes
* **Concession:** *Blank*
* **Lost Item Requests:** Leave blank
* **Ride Waivers:** Caleb Reyes Wide Waiver
* **Tickets:** Marcus Reyes - Flywheel Ticket

**Notifications**

Create two notifications:

* **Notification 1:** Send email **1 day before** activity is due
* **Notification 2:** Send email **4 hours before** activity is due

When you've finished, this should be present on Marcus Reyes's <code class="expression">space.vars.timeline</code>:

<div data-with-frame="true"><figure><img src="/files/ZnesjrXsFxqP2lv8Umna" alt="" width="563"><figcaption></figcaption></figure></div>

***

## How This Fits Into Agentic Workflows

Scheduled <code class="expression">space.vars.activities</code> represent planned touch points and are central to proactive <code class="expression">space.vars.automations</code> in <code class="expression">space.vars.Kizen\_company\_name</code>. In the Reyes family example, scheduling Ride Waiver Confirmation <code class="expression">space.vars.activities</code> ensures required steps happen before the family arrives. Once scheduled, these <code class="expression">space.vars.activities</code> can trigger reminders, assign tasks to staff, and prepare systems for the visit—helping teams address needs in advance rather than at check-in.

Scheduled <code class="expression">space.vars.activities</code> can be used to:

* Send reminders or notifications before a visit
* Assign preparation tasks based on timing or ticket type
* Ensure required steps, like waiver completion, aren’t missed
* Feed planning data into staffing and operational reports

By Scheduling <code class="expression">space.vars.activities</code> consistently, teams move from reactive to proactive. Guests receive timely communication, staff know what’s coming, and <code class="expression">space.vars.automations</code> handle preparation ahead of time. When the work is completed and logged, the <code class="expression">space.vars.timeline</code> closes the loop between planning and execution.

***

## Scheduling Activities Capabilities By Role

{% columns %}
{% column %}

#### Admins

* Create and manage <code class="expression">space.vars.activity</code> types used for scheduling
* Configure required fields, defaults, and associations
* Control permissions for scheduling <code class="expression">space.vars.activities</code> and sending notifications
* Define standard scheduling patterns for common <code class="expression">space.vars.workflows</code>
* Ensure scheduled <code class="expression">space.vars.activities</code> appear correctly on <code class="expression">space.vars.timelines</code> and reports
  {% endcolumn %}

{% column %}

#### Technical Builders

* Automatically schedule <code class="expression">space.vars.activities</code> based on triggers or conditions
* Integrate <code class="expression">space.vars.activity</code> scheduling into <code class="expression">space.vars.automations</code>
* Schedule <code class="expression">space.vars.activities</code> programmatically using the API
* Configure notifications and follow-up actions
* Connect scheduled <code class="expression">space.vars.activities</code> to downstream systems and reporting
  {% endcolumn %}
  {% endcolumns %}

***

## Tying It Back Into Your Industry

In the <code class="expression">space.vars.Theme\_park\_name</code> example, scheduling a Ride Waiver Confirmation ensures required steps are completed before the family arrives. The same scheduling pattern applies across industries where preparation, compliance, or follow-up must happen before a key event.

{% tabs %}
{% tab title="Insurance" %}
Scheduling a Ride Waiver Confirmation is similar to scheduling policy-related follow-ups in insurance.

For example:

* A policy renewal reminder scheduled before expiration
* A document collection task scheduled after a quote is issued
* A compliance review scheduled before coverage becomes active

Just as Guest Services prepares wristbands ahead of time, insurance teams prepare documentation and approvals before a policy milestone.
{% endtab %}

{% tab title="Healthcare" %}
At <code class="expression">space.vars.Theme\_park\_name</code>, waiver confirmation happens before the visit. In healthcare, Scheduled <code class="expression">space.vars.activities</code> support patient readiness before appointments or procedures.

For example:

* Appointment reminders scheduled before a visit
* Insurance verification tasks scheduled ahead of check-in
* Pre-procedure instructions scheduled for patients

In both cases, scheduling ensures staff and patients are prepared before arrival.
{% endtab %}

{% tab title="Financial Services" %}
The Ride Waiver Confirmation <code class="expression">space.vars.activity</code> parallels scheduled client touchpoints in financial services.

For example:

* Annual review meetings scheduled in advance
* Follow-up tasks scheduled after account changes
* Compliance check-ins scheduled around key financial events

Just as <code class="expression">space.vars.Theme\_park\_name</code> schedules preparation before a visit, financial teams schedule <code class="expression">space.vars.activities</code> to ensure readiness before client decisions or regulatory deadlines.
{% endtab %}
{% endtabs %}

***

## **What’s Next?**

Next, you’ll learn about [Logging your Activities](/docs/kizen-basics/kizen-in-action/tracking-your-activity-in-timelines-or-kizen-in-action), including how <code class="expression">space.vars.activity</code> <code class="expression">space.vars.entities</code> appear, update, and stay connected to your data.


# Log Your Activity | Kizen Basics

Learn how to log Activities in Kizen and use timelines to record and track completed actions.

## **Overview**

{% hint style="warning" %}
**Caution:** This setup reflects Kizen's default configuration. Your administrator may have customized your layout, so columns or navigation may appear differently. Trial accounts may have limited features.
{% endhint %}

When an interaction has already happened, log it as an <code class="expression">space.vars.activity</code>. Logged <code class="expression">space.vars.activities</code> capture real interactions—such as purchases, conversations, or questions—and place them on the <code class="expression">space.vars.timeline</code> so teams can see what happened and when.

During their visit, Marcus stops at the snack stand to buy fried dough for his kids. While ordering, he chats with a staff member and asks whether the fried dough contains nuts, since his son Caleb has a nut allergy.

This interaction should be logged as an <code class="expression">space.vars.activity</code>. Logging it records where the family stopped, what they purchased, and important context like allergy concerns. Over time, these entries create a shared, accurate view of the guest experience across teams.

### Why This Matters

Small interactions often carry important context. In the Reyes family’s visit, a simple snack purchase also included a question about nut allergies. When that interaction is logged, it becomes more than just a transaction.

Logged Activities help teams:

* See purchases alongside guest questions or concerns
* Anticipate needs before issues arise, such as allergies or accessibility requests
* Maintain continuity as guests interact with different staff members or departments
* Turn everyday moments into data that supports reporting, staffing, and operational decisions

Without logged <code class="expression">space.vars.activities</code>, these details exist only in the moment. By capturing them on the <code class="expression">space.vars.timeline</code>, <code class="expression">space.vars.Kizen\_company\_name</code> helps teams understand, share, and improve the guest experience across the entire operation.

### Before You Begin

Before logging <code class="expression">space.vars.activities</code>, make sure the following are in place:

* You’ve completed [Scheduling Your Activities & Timelines](/docs/kizen-basics/kizen-in-action/scheduling-your-activity-and-timelines-or-kizen-in-action)
* The **Reyes family Contacts and Guests** have already been created
* An <code class="expression">space.vars.activity</code> exists for **Concessions Purchase**
* A **Concession** <code class="expression">space.vars.object</code> exists
* You have permission to log <code class="expression">space.vars.activities</code> on <code class="expression">space.vars.contact</code> <code class="expression">space.vars.entities</code>

If these items are set up, you’re ready to begin logging real guest interactions.

***

## Logging An Activity

{% stepper %}
{% step %}

#### Go to a Contact Record and select LOG ACTIVITY

Assuming you're still on Marcus Reyes's <code class="expression">space.vars.contact</code> page, go to the Notes panel. From there, select **LOG ACTIVITY**. The dropdown will give you various <code class="expression">space.vars.activities</code> to use. Select **Concessions Purchase**.

<div align="left" data-with-frame="true"><figure><img src="/files/sf597S2W5FXvuPCmhSSU" alt="" width="563"><figcaption></figcaption></figure></div>
{% endstep %}

{% step %}

#### Fill out Log Activity fields

On the Log <code class="expression">space.vars.activity</code>'s panel you can see various fields.

<div align="center" data-with-frame="true"><figure><img src="/files/oEwJ08gwi5C82HaEzkjV" alt="" width="563"><figcaption></figcaption></figure></div>

Complete the **Concession Purchases Activity** using the details below.

**Verify Associations**

* **Contacts:** Marcus Reyes
* **Concessions:** In the drop down, select **Fried Dough**.
* **Lost Item Requests:** *Blank*
* **Ride Waivers:** *Blank*
* **Tickets:** Select **Marcus Reyes - Flywheel Ticket**

In the Notes section, Write:  Marcus Reyes purchases a Fried Dough for his two kids.
{% endstep %}

{% step %}

#### Select **COMPLETE**

{% endstep %}
{% endstepper %}

Now you should see that the logged <code class="expression">space.vars.activity</code> appear on Marcus’s <code class="expression">space.vars.timeline</code> with the selected date and time, assigned staff member, <code class="expression">space.vars.activity</code> details, related <code class="expression">space.vars.entities</code>, and any notes.

It will look like this:

<div align="center" data-with-frame="true"><figure><img src="/files/BNEOvK2HgYMd8iiytJj7" alt="" width="563"><figcaption></figcaption></figure></div>

***

## Apply What You've Learned

Now that you’ve logged one <code class="expression">space.vars.activity</code>, apply what you’ve learned. Log another <code class="expression">space.vars.activity</code> using the same steps. This time, log the <code class="expression">space.vars.activity</code> of Marcus buying a soda for his wife Elena.

You can complete **Concession Purchases Activity** using the details below:

**Verify Associations**

* **Contacts:** Marcus Reyes
* **Concessions:** Soda
* **Lost Item Requests:** Leave blank
* **Ride Waivers:** Leave blank
* **Tickets:** Marcus Reyes - Flywheel Ticket

**Complete Activity**

* **Notes:** Marcus purchases a soda for his wife Elena.

When you're finished, your logged <code class="expression">space.vars.activity</code> should appear on the <code class="expression">space.vars.timeline</code> like this:

<div data-with-frame="true"><figure><img src="/files/tJOmcLA3zcGEtvPyBkEO" alt="" width="563"><figcaption></figcaption></figure></div>

***

## How This Fits Into Agentic Workflows

Logged <code class="expression">space.vars.activities</code> do more than <code class="expression">space.vars.entity</code> history. They become triggers and data inputs for <code class="expression">space.vars.workflows</code> and <code class="expression">space.vars.automations</code> across <code class="expression">space.vars.Kizen\_company\_name</code>.

In the Reyes family example, logging a fried dough purchase can automatically initiate follow-up actions, such as updating inventory levels, flagging allergy-related notes, or contributing to concession sales reports. Because each <code class="expression">space.vars.activity</code> is connected to <code class="expression">space.vars.contacts</code>, Tickets, and staff members, <code class="expression">space.vars.workflows</code> can respond to real interactions as they happen.

When <code class="expression">space.vars.activities</code> are logged, you can use them to:

* Trigger <code class="expression">space.vars.automations</code> based on <code class="expression">space.vars.activity</code> type, completion status, or timing
* Update related <code class="expression">space.vars.entities</code>, such as Tickets or <code class="expression">space.vars.objects</code>
* Route information to the right teams, such as notifying Guest Services about allergy-related notes
* Power reporting and <code class="expression">space.vars.dashboards</code> with accurate, real-world interaction data

By logging Activities consistently, Timelines become actionable. Instead of static <code class="expression">space.vars.entities</code>, they drive <code class="expression">space.vars.automation</code>, insights, and coordinated responses across teams.

***

## Logging Activities Capabilities By Role

{% columns %}
{% column %}

#### Admins

* Configure <code class="expression">space.vars.activity</code> types that can be logged, including required fields and associations
* Define which <code class="expression">space.vars.objects</code> (<code class="expression">space.vars.contacts</code>, Guests, Tickets, <code class="expression">space.vars.objects</code>) appear on logged <code class="expression">space.vars.activities</code>
* Control permissions for who can log, edit, or complete <code class="expression">space.vars.activities</code>
* Ensure logged <code class="expression">space.vars.activities</code> display correctly on <code class="expression">space.vars.timelines</code> and in reports
* Maintain consistency in how interactions, purchases, and notes are recorded across teams
  {% endcolumn %}

{% column %}

#### Technical Builders

* Log <code class="expression">space.vars.activities</code> programmatically using the API
* Trigger <code class="expression">space.vars.workflows</code> and <code class="expression">space.vars.automations</code> based on logged <code class="expression">space.vars.activity</code> events
* Enrich logged <code class="expression">space.vars.activities</code> with data from external systems or integrations
* Update related <code class="expression">space.vars.entities</code> automatically when <code class="expression">space.vars.activities</code> are logged
* Use logged <code class="expression">space.vars.activity</code> data as inputs for reporting, <code class="expression">space.vars.dashboards</code>, and downstream processes
  {% endcolumn %}
  {% endcolumns %}

***

## Tying It Back Into Your Industry

In the <code class="expression">space.vars.Theme\_park\_name</code> example, logging the fried dough purchase captures more than a completed transaction. It captures who was involved, what happened, when it happened, and any important context, such as a guest’s allergy-related question. That logged interaction becomes part of the family’s <code class="expression">space.vars.timeline</code> and informs future decisions.

The same logging pattern applies across industries where completed interactions, conversations, and outcomes need to be preserved and understood in context.

{% tabs %}
{% tab title="Insurance" %}
Logging a fried dough purchase is similar to logging completed client interactions in insurance.

Examples include:

* A call where a policyholder asks about coverage limitations
* A completed claim discussion with notes on next steps
* A client question that signals potential risk, coverage gaps, or follow-up needs

Just as the allergy question adds important context at <code class="expression">space.vars.Theme\_park\_name</code>, logged insurance Activities capture details that support compliance, continuity of service, and accurate reporting.
{% endtab %}

{% tab title="Healthcare" %}
At <code class="expression">space.vars.Theme\_park\_name</code>, logging captures what happened during a guest visit. In healthcare, logging <code class="expression">space.vars.activities</code> documents completed care interactions and patient communication.

Examples include:

* A completed appointment with provider notes
* A patient question about medication, allergies, or side effects
* A follow-up conversation after a procedure or lab result

Logging these interactions ensures care teams share the same patient history and can make informed decisions over time.
{% endtab %}

{% tab title="Financial Services" %}
The fried dough interaction represents a completed moment with meaningful context. In financial services, Logged <code class="expression">space.vars.activities</code> capture completed client touchpoints and decision history.

Examples include:

* A client meeting discussing portfolio changes
* A completed compliance or suitability review
* A conversation revealing new financial goals or concerns

By logging <code class="expression">space.vars.activities</code> consistently, financial teams preserve decision context, support regulatory accountability, and maintain accurate client <code class="expression">space.vars.timelines</code>.
{% endtab %}
{% endtabs %}

***

## What's Next?

Next, we’ll cover [Reporting in Kizen](/docs/kizen-basics/kizen-in-action/reporting-in-kizen-or-kizen-in-action), where you’ll learn how to build, customize, and analyze reports to gain visibility into your data, <code class="expression">space.vars.activity</code> performance, and <code class="expression">space.vars.automation</code> outcomes.


# Reports in Kizen | Kizen Basics

Build Kizen dashboards to monitor activities, track records, and report on live operational data using Dashlets, filters, and role-based sharing settings.

## Overview

<code class="expression">space.vars.dashboards</code> provide a visual way to monitor activity, performance, and operational data in <code class="expression">space.vars.Kizen\_company\_name</code>. By combining charts, tables, and <code class="expression">space.vars.activity</code> views into a single workspace, <code class="expression">space.vars.dashboards</code> allow teams to track important information without navigating through multiple <code class="expression">space.vars.entities</code> or pages.

In this walkthrough, you will build a <code class="expression">space.vars.dashboard</code> for <code class="expression">space.vars.Theme\_park\_name</code> that displays scheduled <code class="expression">space.vars.activities</code> and guest information. You will create a <code class="expression">space.vars.dashboard</code>, add dashlets, and configure views that help park staff track upcoming guest events, monitor reservations, and quickly view customer data established in previous tutorials.

### Why This Matters

<code class="expression">space.vars.dashboards</code> help organizations turn operational data into actionable insight. Using <code class="expression">space.vars.dashboards</code> allows teams to:

* Monitor scheduled <code class="expression">space.vars.activities</code> and upcoming work
* Track <code class="expression">space.vars.entity</code> data such as <code class="expression">space.vars.contacts</code>, reservations, and guest information
* Identify operational issues quickly
* Share a common view of key business metrics across teams
* Reduce time spent navigating between individual <code class="expression">space.vars.entities</code>

For <code class="expression">space.vars.Theme\_park\_name</code>, the <code class="expression">space.vars.dashboard</code> ensures staff can easily monitor upcoming guest <code class="expression">space.vars.activities</code> and quickly access related <code class="expression">space.vars.contact</code> information. Instead of manually reviewing individual <code class="expression">space.vars.entities</code>, the team can see operational status in one place.

### Before You Begin

To build a <code class="expression">space.vars.dashboard</code>, you must:

* Be an Admin or Technical Builder with <code class="expression">space.vars.dashboard</code> creation permissions
* Have completed:
  * [Create Your First Contact Record](/docs/kizen-basics/kizen-in-action/create-your-first-contact-record-or-kizen-basics)
  * [Create Your First Object](/docs/kizen-basics/kizen-in-action/create-your-first-object-or-kizen-basics)
  * [Create Your First Record](/docs/kizen-basics/kizen-in-action/create-your-first-record-or-kizen-basics)
  * [Create Your First Workflow Object](/docs/kizen-basics/kizen-in-action/create-your-first-workflow-or-kizen-in-action)
  * [Schedule Your First Activity](/docs/kizen-basics/kizen-in-action/scheduling-your-activity-and-timelines-or-kizen-in-action)&#x20;
  * [Log Your First Activity](/docs/kizen-basics/kizen-in-action/tracking-your-activity-in-timelines-or-kizen-in-action)
* You should already have:
  * <code class="expression">space.vars.contact</code> <code class="expression">space.vars.entities</code> for Marcus, Elena, Sofia, and Caleb
  * Ticket, Concession, and Ride Waiver <code class="expression">space.vars.objects</code> and <code class="expression">space.vars.entities</code> with associations to your <code class="expression">space.vars.contact</code> <code class="expression">space.vars.entities</code>.
  * Scheduled and Logged Activities linked to tickets or various guest experiences

***

## Building a Dashboard

{% stepper %}
{% step %}

#### Navigate to **Dashboard**

In the navigation menu, select **Dashboard**.

<div data-with-frame="true"><figure><img src="/files/Yy2rwJZThNh60MfSpCKz" alt="" width="563"><figcaption></figcaption></figure></div>

Then select **ADD DASHBOARD** from the dropdown menu.
{% endstep %}

{% step %}

#### Set your Dashboard preferences

<div data-with-frame="true"><figure><img src="/files/r3b7STtKzGnR5rSEeJ1N" alt="" width="375"><figcaption></figcaption></figure></div>

In the Add <code class="expression">space.vars.dashboard</code> modal, enter the following:

* **Dashboard Name:** Flywheel Operations <code class="expression">space.vars.dashboard</code>
* **Make Private:** Disabled

{% hint style="info" %}
**Note:** When **Make Private** is enabled, the <code class="expression">space.vars.dashboard</code> is hidden from search and other users cannot request access. Access must be granted manually.
{% endhint %}

* **Customize Styles:** Disabled

{% hint style="info" %}
**Note:** When **Customize Styles** is enabled, you can adjust the <code class="expression">space.vars.dashboard</code>’s visual appearance, including chart colors, trend lines, donut segments, headers, and other theme elements.
{% endhint %}

* **Sharing settings:**&#x20;
  * **All Team Members:** View
  * **Specific Roles:** Blank
  * **Specific Team Members:** Blank

{% hint style="info" %}
**Note:** **Share Settings** allow you to grant <code class="expression">space.vars.dashboard</code> access to specific team members, roles, or groups. For this tutorial, all team members have been given **view access** to the **Flywheel Operations Dashboard**.
{% endhint %}

Select **SAVE**

<div data-with-frame="true"><figure><img src="/files/jElq5ZTFj9JjiIao73bB" alt="" width="563"><figcaption></figcaption></figure></div>

Your new <code class="expression">space.vars.dashboard</code> has been created.
{% endstep %}

{% step %}

#### Add an Activity Dashlet

Select **ADD DASHLET**

Enter the following:

* **Area:** Activities
* **Report Type:** Number of Activity Submissions
* **Choose Activity:** Ride Waiver Confirmation

<div data-with-frame="true"><figure><img src="/files/SuKxkxt3qhQr4aX25zkV" alt="" width="563"><figcaption></figcaption></figure></div>

For Values & Constraints, enter the following:

* **Dashlet Filters:** 0 Selected
* **Assigned to Employee with Role:** *Blank*
* **Assigned to Employee:** *Blank*

<div data-with-frame="true"><figure><img src="/files/eg5Quu06d4tLeoU96tzE" alt="" width="563"><figcaption></figcaption></figure></div>

For Display Settings, enter the following:

* **Display Setting:** Trend
* **Datapoint Frequency:** Weekly
* **Name Your Dashlet**: Ride Waiver Confirmation - Total Submissions Over Time

<div data-with-frame="true"><figure><img src="/files/TgJ6Vr6ORDEJ76MDQiT6" alt="" width="563"><figcaption></figcaption></figure></div>

Select **ADD.**&#x20;
{% endstep %}
{% endstepper %}

Now you have created a dashlet to allow <code class="expression">space.vars.Theme\_park\_name</code> staff to monitor all Ride Waiver submissions. Because Marcus has submitted those ride waiver confirmations before for his kids, your graph will look like this (with different dates):

<div data-with-frame="true"><figure><img src="/files/QZQAK0JBLTcta3sH9a6d" alt="" width="563"><figcaption></figcaption></figure></div>

Your <code class="expression">space.vars.Theme\_park\_name</code> Operations Dashboard is now ready for use.

***

## Apply What You've Learned

With the Waiver Submissions Dashlet now complete, it’s time to apply what you have learned to create a graph for tracking ticket purchases using the same steps. These <code class="expression">space.vars.objects</code> will track purchases made in the park and adherence to safety policies.

Use the information below to set it up.

* **Area:** Activities
* **Report Type:** Number of Activity Submissions
* **Choose Activity:** Purchase Tickets
* **Dashlet Filters:** 0 Selected
* **Assigned to Employee with Role:** *Blank*
* **Assigned to Employee:** *Blank*

When you complete this process, you should have two graphs that look like this (with different dates).

<div data-with-frame="true"><figure><img src="/files/awCth9LeveguVnDpNimP" alt="" width="563"><figcaption></figcaption></figure></div>

***

## How This Fits Into Agentic Workflows

<code class="expression">space.vars.dashboards</code> do more than display data. They surface the results of <code class="expression">space.vars.automations</code> across the platform.

In the <code class="expression">space.vars.Theme\_park\_name</code> example, when a guest books an adventure experience, several automated processes may occur. A <code class="expression">space.vars.contact</code> <code class="expression">space.vars.entity</code> may be created or updated, an <code class="expression">space.vars.activity</code> may be scheduled for the reservation, and an <code class="expression">space.vars.automation</code> may send a confirmation email to the guest. Because these actions are connected to <code class="expression">space.vars.entities</code> and <code class="expression">space.vars.activities</code>, <code class="expression">space.vars.dashboards</code> can display the resulting data as it occurs.

When <code class="expression">space.vars.dashboards</code> reflect live operational data, teams can use them to:

* Monitor activities created by <code class="expression">space.vars.automations</code>
* Track <code class="expression">space.vars.entity</code> updates generated by automated processes
* Identify upcoming tasks that require staff attention
* Observe operational metrics produced by automated events

By surfacing this information in one place, <code class="expression">space.vars.dashboards</code> provide operational visibility. Instead of reviewing individual <code class="expression">space.vars.entities</code> or processes, teams can monitor <code class="expression">space.vars.automations</code> as they unfold and respond quickly when action is required.

***

## Dashboard Capabilities by Role

{% columns %}
{% column %}

#### Admins

* Configure which <code class="expression">space.vars.dashboards</code> are available to teams and departments
* Define sharing settings and visibility for <code class="expression">space.vars.dashboards</code> and dashlets
* Control permissions for who can create, edit, or view <code class="expression">space.vars.dashboards</code>
* Ensure <code class="expression">space.vars.dashboards</code> display the correct <code class="expression">space.vars.entity</code> data and <code class="expression">space.vars.activity</code> information
* Maintain consistency in how operational metrics and reports are presented across teams
  {% endcolumn %}

{% column %}

#### Technical Builders

* Configure dashlets to display <code class="expression">space.vars.entities</code>, <code class="expression">space.vars.activities</code>, and operational data
* Apply filters, views, and sorting logic to shape <code class="expression">space.vars.dashboard</code> reporting
* Use <code class="expression">space.vars.dashboards</code> to monitor data generated by <code class="expression">space.vars.automations</code>
* Ensure <code class="expression">space.vars.dashboards</code> reflect changes to <code class="expression">space.vars.objects</code>, fields, and relationships
* Use <code class="expression">space.vars.dashboard</code> data to support reporting, operational monitoring, and downstream processes
* Create <code class="expression">space.vars.dashboards</code> that can be shared with other team members in the business.
  {% endcolumn %}
  {% endcolumns %}

***

## Tying It Back to Your Industry

In the <code class="expression">space.vars.Theme\_park\_name</code> example, the <code class="expression">space.vars.dashboard</code> provides a central place for staff to monitor scheduled guest activities and quickly view related <code class="expression">space.vars.contact</code> information. The same <code class="expression">space.vars.dashboard</code> pattern applies across industries where teams need visibility into operational work, upcoming tasks, and customer <code class="expression">space.vars.entities</code>.

{% tabs %}
{% tab title="Insurance" %}
Tracking scheduled guest activities in a <code class="expression">space.vars.dashboard</code> is similar to monitoring policy and service <code class="expression">space.vars.activities</code> in insurance.

For example:

* A <code class="expression">space.vars.dashboard</code> showing new policy applications awaiting review
* A <code class="expression">space.vars.dashboard</code> tracking claims processing activities and required follow-ups
* A <code class="expression">space.vars.dashboard</code> displaying scheduled agent outreach or client meetings
* A <code class="expression">space.vars.dashboard</code> highlighting upcoming policy renewal reminders

Just as <code class="expression">space.vars.Theme\_park\_name</code> staff monitor upcoming guest reservations, insurance teams use <code class="expression">space.vars.dashboards</code> to monitor policy <code class="expression">space.vars.activity</code> and ensure critical milestones are not missed.
{% endtab %}

{% tab title="Healthcare" %}
Healthcare organizations use <code class="expression">space.vars.dashboards</code> to maintain visibility into patient care coordination and operational workflows.

For example:

* A <code class="expression">space.vars.dashboard</code> showing scheduled patient appointments for the day
* A <code class="expression">space.vars.dashboard</code> tracking follow-up care activities after procedures
* A <code class="expression">space.vars.dashboard</code> monitoring insurance verification tasks before visits
* A <code class="expression">space.vars.dashboard</code> displaying care team workloads and patient assignments

Just as <code class="expression">space.vars.Theme\_park\_name</code> staff monitor guest experiences and reservations, healthcare teams monitor patient care activities and operational readiness.
{% endtab %}

{% tab title="Financial Services" %}
Financial services teams rely on <code class="expression">space.vars.dashboards</code> to track client engagement and advisory workflows.

For example:

* A <code class="expression">space.vars.dashboard</code> displaying new client onboarding activities
* A <code class="expression">space.vars.dashboard</code> tracking scheduled portfolio review meetings
* A <code class="expression">space.vars.dashboard</code> monitoring compliance follow-ups and documentation reviews
* A <code class="expression">space.vars.dashboard</code> showing the investment workflow and upcoming client interactions

Just as <code class="expression">space.vars.Theme\_park\_name</code> staff use <code class="expression">space.vars.dashboards</code> to track guest interactions and reservations, financial services teams use dashboards to maintain visibility into client relationships and advisory activities.
{% endtab %}
{% endtabs %}

Regardless of industry, dashboards provide a centralized view of operational activity, helping teams monitor work, manage customer relationships, and ensure important steps occur at the right time.

***

## Congratulations

You've completed <code class="expression">space.vars.Kizen\_company\_name</code> Basics and now have a working foundation in <code class="expression">space.vars.Kizen\_company\_name</code> and the core skills to start building for your own organization!

From here, you can explore the rest of the <code class="expression">space.vars.Kizen\_company\_name</code> documentation at your own pace. Concept topics go deeper on how individual features work, and additional guides cover more advanced configuration as your needs grow.


# Environments

Understand Kizen API environments, including GO and FMO production instances, API base URLs, environment-specific authentication, and common environment mismatch errors.

{% hint style="success" %}
**Audience:** Admins, Developers, Solution Architects

**Purpose:** Explains how <code class="expression">space.vars.Kizen\_company\_name</code> production environments work so you can correctly select API base URLs, configure authentication, and avoid cross-environment integration errors.
{% endhint %}

## Overview

The <code class="expression">space.vars.Kizen\_company\_name</code> environment refers to the specific production instance of the <code class="expression">space.vars.Kizen\_company\_name</code> platform where a business account is hosted. Each environment has its own Web App URL and API base URL and operates as a separate production cluster.

When building integrations, selecting the correct environment is critical. API requests sent to the wrong environment will fail authentication or return unexpected results because credentials, data, and configurations are not shared across environments.

### Available Environments

<code class="expression">space.vars.Kizen\_company\_name</code> currently supports the following production environments:

<table><thead><tr><th width="136.640625">Environment</th><th width="187">API Base URL</th><th width="247.69140625">Web App URL</th><th>Typical Use Case</th></tr></thead><tbody><tr><td>GO</td><td><a href="https://app.go.kizen.com/api">https://app.go.kizen.com/api</a></td><td><a href="https://go.kizen.com">https://go.kizen.com</a></td><td>Primary production environment</td></tr><tr><td>FMO</td><td><a href="https://app.fmo.kizen.com/api">https://app.fmo.kizen.com/api</a></td><td><a href="https://fmo.kizen.com">https://fmo.kizen.com</a></td><td>Alternate production environment, specific to FMOs</td></tr></tbody></table>

***

## Environment Isolation and Authentication

Each <code class="expression">space.vars.Kizen\_company\_name</code> environment is fully isolated. Databases, business accounts, users, API tokens, and OAuth contexts are not shared across environments. Data created in one environment is not accessible from another.

Authentication is environment-specific. Credentials are issued within a specific environment and are valid only for that environment’s API base URL. A token generated in `go` cannot authenticate against `fmo`.

If you receive a `401 Unauthorized` response and your credentials are correct, verify that:

* The API base URL matches your UI environment
* The token was generated in the same environment you are calling

For additional guidance, see the [Authentication](/docs/developers/authentication) documentation.

***

## Testing, Deployment, and Troubleshooting

<code class="expression">space.vars.Kizen\_company\_name</code> does not provide public sandbox environments, so integrations operate directly against production environments. Use a non-critical production account for development testing and avoid destructive operations on live business data. Before deploying updates, confirm that environment variables reference the correct API base URL and that environment-specific credentials are properly configured. Misconfigured environment values are a common cause of integration failures.

Common symptoms of an environment mismatch include `401 Unauthorized` errors despite valid credentials, `404 Not Found` responses for known <code class="expression">space.vars.entities</code>, missing data, or OAuth flows that succeed while API calls fail. In most cases, the API request is being sent to the wrong environment. Verify the Web App URL, the API base URL, and the environment where the token was generated before investigating further.

<details>

<summary>API Base URL Structure</summary>

#### About the API Base URL Structure

The general API format is:

```bash
https://app.{environment}.kizen.com/api
```

Replace `{environment}` with either:

* `go`
* `fmo`

All endpoints documented in the API Reference are relative to this base URL.

Example endpoint:

```bash
GET /objects
```

Full request:

```bash
https://app.go.kizen.com/api/objects
```

#### Using the Correct Environment in API Calls

Environment selection only affects the base URL. All endpoints remain the same.

**Example: GO Environment**

```bash
curl \
  -H "x-api-key: {api_key}" \
  -H "x-user-id: {user_id}" \
  -H "x-business-id: {business_id}" \
  https://app.go.kizen.com/api/objects
```

**Example: FMO Environment**

```bash
curl \
  -H "x-api-key: {api_key}" \
  -H "x-user-id: {user_id}" \
  -H "x-business-id: {business_id}" \
  https://app.fmo.kizen.com/api/objects
```

If the base URL does not match the environment where the token was issued, the request will fail.

</details>

***

## What’s Next

Next, confirm which <code class="expression">space.vars.Kizen\_company\_name</code> environment your business is hosted in by checking the Web App URL and verifying the matching API base URL. From there, generate credentials within that environment and proceed to [Authentication](/docs/developers/authentication) before making your first API call.

<details>

<summary>Related Topics</summary>

* [Authentication](/docs/developers/authentication)
* [Objects](/docs/concepts/objects)
* [Records API](/docs/concepts/objects/records/records-apis)

</details>


# Authentication

Learn Kizen API authentication. Compare token-based and OAuth2 methods, configure required headers, and set up secure access for your enterprise integration.

{% hint style="success" %}
**Audience:** Developers

**Purpose:** Explains the two supported authentication methods for the <code class="expression">space.vars.Kizen\_company\_name</code> API, token-based authentication and OAuth2, including setup steps, required headers, and security best practices.
{% endhint %}

## **Overview**

Every request to the <code class="expression">space.vars.Kizen\_company\_name</code> API must be authenticated. Authentication tells the API who is making the request, which business account to scope it to, and whether that user has permission to access the requested data.&#x20;

There are two supported methods:&#x20;

* **Token-based authentication**
  * Recommended starting point for most integrations
* **OAuth2**
  * More secure option for production integrations&#x20;

This topic covers both methods and helps you decide which one fits your use case.

***

## **Token-Based Authentication**

Token-based authentication is the simplest and most common way to get started with the <code class="expression">space.vars.Kizen\_company\_name</code> API. It uses an API key tied to a specific <code class="expression">space.vars.Kizen\_company\_name</code> user, along with that user's business ID and user ID. All three are required on every request.

### **Setting Up a Dedicated API User**

Before creating an API key, it’s strongly recommended to set up a dedicated user specifically for API access rather than using a personal account. API keys inherit the permissions of the user they belong to, so using a personal account would grant the integration full access to everything that user can do.

Instead, create a dedicated API user with a tightly scoped permission group that includes only what the integration needs. Then assign that permission group to the API user and generate the API key from that account. This approach limits access, and makes it easier to manage, audit, and revoke permissions without affecting other users.

### **Required Headers**

Once you have an API key, every call to the <code class="expression">space.vars.Kizen\_company\_name</code> API must include the following three headers:

* `X-API-KEY`**:** authenticates the request, acting as the password for the user ID
* `X-BUSINESS-ID`**:** scopes the request to the correct <code class="expression">space.vars.Kizen\_company\_name</code> business account
* `X-USER-ID`**:** identifies the user, determining which records and features are accessible based on their permissions

The business ID and user ID can both be found on the My Profile page when viewing an existing API key. For more information on Generating or Revoking API Keys, see [Generate API Credentials](/docs/developers/building-with-apis/generating-api-credentials).

***

## **OAuth2 Authentication**

OAuth2 is the more secure option for production integrations. Unlike token-based authentication, it keeps static credentials out of your integration entirely. It uses an Authorization Code flow with Proof Key for Code Exchange (PKCE), short-lived access tokens, and automatic token rotation, making it better suited for integrations that require delegated access or need to act on behalf of multiple users.

### **How It Works**

Access tokens expire after 1 hour and are refreshed using a refresh token, which expires after 48 hours. Each refresh issues a new refresh token and invalidates the old one, with a 5-minute grace period to handle network failures.&#x20;

Because of this rotation behavior, always use a singleton pattern when refreshing tokens to avoid race conditions.

### **Configuration**

Once your client application has been set up, configure your integration as follows:

* **Authorize URI**: <https://app.go.kizen.com/oauth2/authorize/>
* **Token URI:** <https://app.go.kizen.com/oauth2/token/>
* **Client ID:** provided by Kizen during provisioning
* **Token:** secret provided by Kizen during provisioning
* **Response Type:** Code
* **Response Mode:** form\_post
* **Scope:** read
* **Use PKCE:** True
* **Encryption:** SHA-256

### **Getting Set Up**

OAuth2 client applications are provisioned by <code class="expression">space.vars.Kizen\_company\_name</code>. To get started, contact your <code class="expression">space.vars.Kizen\_company\_name</code> support representative with the following information:&#x20;

* Your application name
* Environments you need to support
* Redirect URI or URIs your integration will use

<code class="expression">space.vars.Kizen\_company\_name</code> will then provide you with a Client ID and Secret via secure communication.&#x20;

Access and refresh tokens can be revoked at any time via API call or through the My Profile page in <code class="expression">space.vars.Kizen\_company\_name</code>.

***

## **What's Next**

Now that you understand how authentication works, start with [Generating your API Credentials](/docs/developers/building-with-apis/generating-api-credentials), then move on to [Create Your First API Call](/docs/developers/building-with-apis/creating-your-first-api-call) to test your credentials and confirm everything is working in the test environment.


# Build with APIs

Explore the Kizen API — learn how it works, key concepts like Objects, Records, and Permissions, and the authentication methods needed to start building integrations.

{% hint style="success" %}
**Audience:** Administrators and Developers

**Purpose:** Provides an overview of <code class="expression">space.vars.Kizen\_company\_name</code>'s APIs, including how it works, key concepts, and available authentication methods, to help administrators and developers understand what they need before building integrations.
{% endhint %}

## Overview

<code class="expression">space.vars.Kizen\_company\_name</code>'s APIs give you programmatic access to the data, <code class="expression">space.vars.objects</code>, and <code class="expression">space.vars.automation</code> engine that powers the <code class="expression">space.vars.Kizen\_company\_name</code> platform. Using our APIs, allows you to connect to external systems, sync data, trigger <code class="expression">space.vars.workflows</code>, and build custom integrations without touching the <code class="expression">space.vars.Kizen\_company\_name</code> UI.

### What You Can Do with Kizen's APIs

<code class="expression">space.vars.Kizen\_company\_name</code>'s APIs support a wide range of operations across the platform, including:

* Reading and writing <code class="expression">space.vars.entities</code> for any <code class="expression">space.vars.object</code> or <code class="expression">space.vars.contact</code>
* Retrieving <code class="expression">space.vars.object</code> schemas, field definitions, and workflow configuration
* Triggering <code class="expression">space.vars.automations</code> programmatically
* Scheduling and managing <code class="expression">space.vars.activities</code>
* Checking user permissions at runtime
* Extending the platform through webhooks and plugins

### How the APIs Work

<code class="expression">space.vars.Kizen\_company\_name</code>'s APIs are REST APIs. All requests are made over HTTPS to a base URL. The URL you use depends on your <code class="expression">space.vars.Kizen\_company\_name</code> [environment](/docs/developers/environments). The following is an example:

```
https://app.go.kizen.com/api/
```

Requests and responses use JSON. Every API call must include three credentials passed as HTTP request headers — an **API Key**, a **Business ID**, and a **User ID**. Together, these three values tell the API who is making the request, which business account to scope it to, and whether that user has permission to access the requested data.

| Header          | Purpose                                                                                                                                           |
| --------------- | ------------------------------------------------------------------------------------------------------------------------------------------------- |
| `X-API-KEY`     | Authenticates the request — acts as the password for the User ID                                                                                  |
| `X-BUSINESS-ID` | Scopes the request to the correct <code class="expression">space.vars.Kizen\_company\_name</code> business account                                |
| `X-USER-ID`     | Identifies the user, determining which <code class="expression">space.vars.entities</code> and features are accessible based on their permissions |

All three headers are required on every request. Generating these credentials is covered in [Generate API Credentials](/docs/developers/building-with-apis/generating-api-credentials).

***

## API Fundamentals

Before diving into API calls, a few core concepts are worth understanding.

Here's a table summarizing the API Fundamentals concepts:

| Concept                                                                                   | Definition                                                       | Key Detail                                                                                                                                                                                  |
| ----------------------------------------------------------------------------------------- | ---------------------------------------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| [Objects](/docs/concepts/objects)                                                         | Tables in your data model                                        | Configured by you or your team; <code class="expression">space.vars.contact</code> <code class="expression">space.vars.object</code> is a special type for storing individual's information |
| [Records](/docs/concepts/objects/records)                                                 | Rows within an Object                                            | Represents a single entry of data within an <code class="expression">space.vars.object</code>                                                                                               |
| [Object Identifiers](/docs/concepts/objects/object-data-model#how-objects-are-identified) | Unique ID (UUID) or API Name that identifies every Object        | API Names are preferred — easier to read, resilient to data model changes, and usable across businesses with different credentials                                                          |
| [Permissions](/docs/concepts/objects/object-configuration/object-permissions)             | Access rules that control what data a request can read or modify | Based on the User ID in request headers; a dedicated API user with a purpose-built permission group is strongly recommended                                                                 |

<code class="expression">space.vars.Kizen\_company\_name</code> supports two authentication methods:

* Token-based authentication is quick to set up, passing a static API Key, Business ID, and User ID as headers on every request.&#x20;
* OAuth 2.0 is the more secure option for production integrations, using an Authorization Code flow with PKCE (Proof Key for Code Exchange) and automatic token expiration.&#x20;

For more information see, [Authentication](/docs/developers/authentication).

***

## Topics In This Section

* [Generate API Credentials](/docs/developers/building-with-apis/generating-api-credentials): Create your API Key, Business ID, and User ID in the <code class="expression">space.vars.Kizen\_company\_name</code> UI
* [Create Your First API Call](/docs/developers/building-with-apis/creating-your-first-api-call): Use those credentials to make a live, authenticated API request

***

## What's Next

Start with [Generate API Credentials](/docs/developers/building-with-apis/generating-api-credentials) — once your credentials are ready, you have everything you need to make your first API call.

<details>

<summary>Related Topics</summary>

* [Environments](/docs/developers/environments)
* [Authentication](/docs/developers/authentication)
* [Generating API Credentials](/docs/developers/building-with-apis/generating-api-credentials)
* [Create Your First API Call](/docs/developers/building-with-apis/creating-your-first-api-call)

</details>


# Generate API Credentials

Learn how to generate your Kizen API Key, User ID, and Business ID to authenticate API requests and connect external systems to your Kizen business account.

{% hint style="success" %}
**Audience:** Administrators and Developers

**Purpose:** Explains how to generate and manage API credentials in the <code class="expression">space.vars.Kizen\_company\_name</code> UI, including an API Key, User ID, and Business ID, required to authenticate requests to the <code class="expression">space.vars.Kizen\_company\_name</code> API.
{% endhint %}

## Overview

API credentials authenticate every request you make to the <code class="expression">space.vars.Kizen\_company\_name</code> API. Before you can make your first API call, you need three credentials: an **API Key**, a **Business ID**, and a **User ID**. <code class="expression">space.vars.Kizen\_company\_name</code> generates all three at the same time from the **API Connections** page.

### Before You Begin

Generating API credentials requires the appropriate permission in your <code class="expression">space.vars.Kizen\_company\_name</code> account. If you do not see the API Connections tab, contact your <code class="expression">space.vars.Kizen\_company\_name</code> administrator to have the permission enabled for your role.

It is also strongly recommended that you generate credentials for a dedicated API user rather than your personal account. A dedicated API user limits the integration's access to only what it needs and makes credential management easier to audit over time. See your <code class="expression">space.vars.Kizen\_company\_name</code> administrator to set this up before proceeding.

***

## Generate Your API Credentials

{% stepper %}
{% step %}

#### In <code class="expression">space.vars.Kizen\_company\_name</code>, select your Profile Avatar

<div data-with-frame="true"><figure><img src="/files/sFpTMUb1yprc1d164IBT" alt="" width="234"><figcaption></figcaption></figure></div>

The profile dropdown will appear.
{% endstep %}

{% step %}

#### Select **My Profile**

You are taken to the my profile page.
{% endstep %}

{% step %}

#### Select the **API Connections** tab

<div data-with-frame="true"><figure><img src="/files/JIuYWifhJBbfyLulaiWQ" alt="" width="563"><figcaption></figcaption></figure></div>

You are taken to the API Keys page.
{% endstep %}

{% step %}

#### Create your Credentials

In the **API Keys** panel, select **+ ADD API KEY.**

<div data-with-frame="true"><figure><img src="/files/OMGsWtSuLes25AnLSwTc" alt="" width="563"><figcaption></figcaption></figure></div>

The **API Key Created** modal appears, displaying all three credentials:

* **API Key** — the password that authenticates the request
* **User ID** — identifies the user making the request
* **Business ID** — scopes the request to your <code class="expression">space.vars.Kizen\_company\_name</code> business account

<div data-with-frame="true"><figure><img src="/files/sAtQGEqoN0ZpbsiHOk32" alt="" width="375"><figcaption></figcaption></figure></div>
{% endstep %}
{% endstepper %}

You have now generated your API credentials!  Ensure that you copy all three values and store them in a secure location such as a secrets manager or secure vault for future use.

***

## Managing Your API Keys

Once generated, your API keys are listed in the **API Keys** panel on the **API Connections** page.&#x20;

<div data-with-frame="true"><figure><img src="/files/6Vy6zxiIpZkUhoNTT2S4" alt="" width="563"><figcaption></figcaption></figure></div>

From the API Keys Panel you can:

* Create more API Keys
* See the date and time each key was created
* View a full API Key
* Delete an API Key

Your **User ID** and **Business ID** are also always visible on the **API Connections** page, so you can refer back to them at any time without needing to regenerate your credentials.

***

## What's Next

With your credentials ready, now you can continue to [Create Your First API Call](/docs/developers/building-with-apis/creating-your-first-api-call).

<details>

<summary>Related Topics</summary>

* [Environments](/docs/developers/environments)
* [Authentication](/docs/developers/authentication)
* [Build with APIs](/docs/developers/building-with-apis)
* [Create Your First API Call](/docs/developers/building-with-apis/creating-your-first-api-call)

</details>


# Create Your First API Call

Learn how to make your first authenticated Kizen API call. This step-by-step guide walks developers through assembling credentials and calling the Kizen REST API.

{% hint style="success" %}
**Audience:** Developers

**Purpose:** Provides step-by-step instructions for making an authenticated request to the <code class="expression">space.vars.Kizen\_company\_name</code> API using an API Key, Business ID, and User ID, using the Retrieve <code class="expression">space.vars.object</code> Details by ID endpoint as a working example.
{% endhint %}

## Overview

Now that you have your API credentials, you are ready to make your first authenticated request to the <code class="expression">space.vars.Kizen\_company\_name</code> API. This topic walks you through assembling your credentials, choosing an endpoint, and executing a live API call using the [Retrieve Object Details by ID](/docs/concepts/objects/object-apis/retrieve-object-details-by-id-api) endpoint as an example.

### Before You Begin

Before starting this topic, ensure you have the following ready:

* Your **API Key**, **Business ID**, and **User ID** from the **API Connections** page
* A created <code class="expression">space.vars.object</code> in your <code class="expression">space.vars.Kizen\_company\_name</code> platform. If you have not yet created one, see [Create Your First Object](/docs/kizen-basics/kizen-in-action/create-your-first-object-or-kizen-basics)
* <code class="expression">space.vars.entity</code> details in your <code class="expression">space.vars.object</code>. If you have not yet created any, see [Create Your First Record](/docs/kizen-basics/kizen-in-action/create-your-first-record-or-kizen-basics)
* The **Object ID** of the <code class="expression">space.vars.object</code> you want to retrieve — this is a UUID found in your <code class="expression">space.vars.Kizen\_company\_name</code> <code class="expression">space.vars.object</code> settings
* An HTTP client such as cURL, Postman, or any language-specific (e.g., Python requests, JavaScript fetch) HTTP library

### About the Example Endpoint

This topic uses the [Retrieve Object Details by ID](/docs/concepts/objects/object-apis/retrieve-object-details-by-id-api) endpoint as the example call. This endpoint returns the full schema definition for a single <code class="expression">space.vars.object</code> in your business, including its fields, categories, and relationship configuration. It is a safe, read-only call and will not modify any data.

|              |                                                                  |
| ------------ | ---------------------------------------------------------------- |
| **Method**   | `GET`                                                            |
| **Endpoint** | `/api/custom-objects/{object_pk}/detail`                         |
| **Full URL** | `https://app.go.kizen.com/api/custom-objects/{object_pk}/detail` |

Replace `{object_pk}` with the UUID of the <code class="expression">space.vars.object</code> you want to retrieve.

***

## Create Your First API Call

{% stepper %}
{% step %}

#### Assemble your request headers

Every <code class="expression">space.vars.Kizen\_company\_name</code> API call requires the same three headers. Pull these from the credentials you generated in [Generate API Credentials](/docs/developers/building-with-apis/generating-api-credentials):

| Header          | Value            |
| --------------- | ---------------- |
| `X-API-KEY`     | Your API Key     |
| `X-BUSINESS-ID` | Your Business ID |
| `X-USER-ID`     | Your User ID     |
| `accept`        | application/json |
| {% endstep %}   |                  |

{% step %}

#### Make the request

Choose your preferred tool below. Replace the placeholder values with your actual credentials and the <code class="expression">space.vars.object</code>'s `entity_id`, which you can find in the **General Settings** page of the <code class="expression">space.vars.object</code> when viewing it in edit mode.

{% tabs %}
{% tab title="cURL" %}

```
cURL -X GET "https://app.go.kizen.com/api/custom-objects/{object_pk}/detail" \
  -H "accept: application/json" \
  -H "X-API-KEY: your_api_key_here" \
  -H "X-BUSINESS-ID: your_business_id_here" \
  -H "X-USER-ID: your_user_id_here"
```

{% endtab %}

{% tab title="Python" %}

```python
import requests

url = "https://app.go.kizen.com/api/custom-objects/{object_pk}/detail"

headers = {
    "accept": "application/json",
    "X-API-KEY": "your_api_key_here",
    "X-BUSINESS-ID": "your_business_id_here",
    "X-USER-ID": "your_user_id_here"
}

response = requests.get(url, headers=headers)
print(response.status_code)
print(response.json())
```

{% endtab %}

{% tab title="JavaScript" %}

```javascript
const response = await fetch(
  "https://app.go.kizen.com/api/custom-objects/{object_pk}/detail",
  {
    method: "GET",
    headers: {
      "accept": "application/json",
      "X-API-KEY": "your_api_key_here",
      "X-BUSINESS-ID": "your_business_id_here",
      "X-USER-ID": "your_user_id_here"
    }
  }
);

const data = await response.json();
console.log(data);
```

{% endtab %}
{% endtabs %}
{% endstep %}

{% step %}

#### Receive and understand the response

A successful request returns HTTP **200** with a JSON body containing the full schema definition of the <code class="expression">space.vars.object</code>. Key fields in the response include:

| Field              | Description                                                                                                                                                  |
| ------------------ | ------------------------------------------------------------------------------------------------------------------------------------------------------------ |
| `id`               | The UUID of the <code class="expression">space.vars.object</code>                                                                                            |
| `object_name`      | The display name of the <code class="expression">space.vars.object</code>                                                                                    |
| `object_type`      | Either `pipeline` or `standard`                                                                                                                              |
| `fields`           | An array of all field definitions on the <code class="expression">space.vars.object</code>, including field type, display name, and access rules             |
| `field_categories` | The category groupings fields are organized into                                                                                                             |
| `pipeline`         | Pipeline configuration, including stages, if the <code class="expression">space.vars.object</code> has a <code class="expression">space.vars.workflow</code> |
| `access`           | Whether the current user can view, edit, or remove this <code class="expression">space.vars.object</code>                                                    |

**Example Responses**

{% tabs %}
{% tab title="cURL" %}
cURL prints the raw JSON response directly to the terminal:

```
{
  "id": "123e4567-e89b-12d3-a456-426614174000",
  "object_type": "pipeline",
  "object_name": "Contacts",
  "entity_name": "Contact",
  "is_custom": false,
  "allow_relations": true,
  "fields": [...],
  "field_categories": [...],
  "pipeline": {...},
  "access": {
    "view": true,
    "edit": true,
    "remove": false
  }
}
```

{% endtab %}

{% tab title="Python" %}
`response.json()` parses the JSON into a Python dictionary and `print()` outputs it to the console:

```python
{'id': '123e4567-e89b-12d3-a456-426614174000', 'object_type': 'pipeline', 'object_name': 'Contacts', 'entity_name': 'Contact', 'is_custom': False, 'allow_relations': True, 'fields': [...], 'field_categories': [...], 'pipeline': {...}, 'access': {'view': True, 'edit': True, 'remove': False}}
```

{% endtab %}

{% tab title="JavaScript" %}
`console.log()` outputs the parsed JSON object to the browser or Node.js console:

```javascript
{
  id: '123e4567-e89b-12d3-a456-426614174000',
  object_type: 'pipeline',
  object_name: 'Contacts',
  entity_name: 'Contact',
  is_custom: false,
  allow_relations: true,
  fields: [...],
  field_categories: [...],
  pipeline: {...},
  access: { view: true, edit: true, remove: false }
}
```

{% endtab %}
{% endtabs %}
{% endstep %}
{% endstepper %}

***

## Troubleshooting

If your request does not return a successful `200` response, the HTTP status code in the response will help you identify what went wrong. The most common errors when making your first API call are misconfigured credentials or an incorrect <code class="expression">space.vars.object</code> ID. Use the table below to diagnose and resolve the issue.

<table><thead><tr><th>Status Code</th><th width="249">Likely Cause</th><th>Resolution</th></tr></thead><tbody><tr><td><code>401 Unauthorized</code></td><td>Missing or invalid <code>X-API-KEY</code>, wrong <code>business_id</code> or <code>user_id</code></td><td>Verify your API Key is correct and has not been deleted, and that you have the correct business and user id.</td></tr><tr><td><code>403 Forbidden</code></td><td>User does not have permission to access the <code class="expression">space.vars.object</code></td><td>Check the API user's permission group in <code class="expression">space.vars.Kizen_company_name</code></td></tr><tr><td><code>404 Not Found</code></td><td>The <code>object_pk</code> does not exist or the URL is incorrect</td><td>Confirm the <code class="expression">space.vars.object</code> UUID and that you are using the correct environment URL</td></tr></tbody></table>

If you continue to experience issues after checking the above, contact your <code class="expression">space.vars.Kizen\_company\_name</code> administrator to verify your credentials and permission group are correctly configured. For additional support, visit our [Where to Find Help](/docs/readme/where-to-find-help) page.

***

## What's Next

With your first API call complete, you have everything you need to start exploring the rest of the <code class="expression">space.vars.Kizen\_company\_name</code> API. Some good next steps include:

* Query, create, or update <code class="expression">space.vars.entities</code> for the <code class="expression">space.vars.object</code> using the <code class="expression">space.vars.entities</code> APIs
* Use the field identifiers returned in the response to construct <code class="expression">space.vars.entity</code> payloads
* Explore the full API Reference at [developer.kizen.com/api](https://developer.kizen.com/api)
* Test endpoints interactively using the Swagger docs at [app.go.kizen.com/api/docs/public/swagger](https://app.go.kizen.com/api/docs/public/swagger)

<details>

<summary>Related Topics</summary>

* [Environments](/docs/developers/environments)
* [Authentication](/docs/developers/authentication)
* [Build With APIs](/docs/developers/building-with-apis)
* [Generate API Credentials](/docs/developers/building-with-apis/generating-api-credentials)

</details>


# Build with the MCP

Learn how Kizen's MCP server lets external AI assistants like Claude securely search your Knowledge Catalogs using the Model Context Protocol.

## Overview

The Model Context Protocol (MCP) is an open standard that lets AI assistants connect to external tools and data instead of relying only on what they were trained on. Assistants that support it include Claude, ChatGPT (via Codex), and Gemini (via Antigravity). <code class="expression">space.vars.Kizen\_company\_name</code> exposes an MCP server so a connected assistant can work directly with your <code class="expression">space.vars.Kizen\_company\_name</code> data.

The current <code class="expression">space.vars.Kizen\_company\_name</code> MCP server is read-only and exposes tools for your Knowledge Catalogs: an assistant can list the catalogs you can access, search across them, and open a specific document. Access always follows your existing <code class="expression">space.vars.Kizen\_company\_name</code> permissions, so a connected assistant sees only the catalogs and content you are allowed to view.

Think of MCP as an AI-native way to reach <code class="expression">space.vars.Kizen\_company\_name</code>, alongside the REST API. Where the REST API is built for your code to call, the MCP server is built for an AI assistant to call on your behalf. Unlike REST, MCP doesn't guarantee backward compatibility, since the assistant is expected to discover available tools each time it connects.

## What You Can Do with <code class="expression">space.vars.Kizen\_company\_name</code>'s MCP Server

Once an assistant is connected, it can:

* List the Knowledge Catalogs you have access to.
* Run a semantic search across one or all of those catalogs.
* Retrieve the full text of a specific knowledge document.

The current tools are read-only. The assistant can read your knowledge, but it can't create, edit, or delete anything in <code class="expression">space.vars.Kizen\_company\_name</code>.

## How the MCP Server Works

The <code class="expression">space.vars.Kizen\_company\_name</code> MCP server has one endpoint per environment. Choose the host that corresponds to your <code class="expression">space.vars.Kizen\_company\_name</code> environment:&#x20;

* `POST https://app.go.kizen.com/api/mcp/readonly`&#x20;
* `POST https://app.fmo.kizen.com/api/mcp/readonly`&#x20;

If your business uses a custom domain, use that domain's API host instead of `app.go.kizen.com` or `app.fmo.kizen.com`. The `readonly` portion of the URL selects the server's read-only configuration.&#x20;

Requests use JSON-RPC 2.0 over HTTPS POST, and the assistant follows a simple pattern: It connects, discovers the available tools, then calls a tool and reads the result.

## Authentication

For authentication, the MCP server supports OAuth 2.1 for connection to external AI clients such as Claude and ChatGPT. You connect once, sign in through the browser, choose a business, and approve, with no API key to manage.

For additional information, see the [Authentication](/docs/developers/authentication) page.

## Permissions and Data Scoping

A connected assistant acts as you. It can reach only the Knowledge Catalogs you have View permission on, and only within the business you connected to. Nothing is shared across businesses, and the assistant never gains access beyond your own.

## Available Tools

For each tool's inputs, outputs, and behavior, see the [MCP Tools](/docs/developers/build-with-the-mcp/mcp-tools) page.

***

## What's Next

Start by connecting a client in [Connect an AI Assistant](/docs/developers/build-with-the-mcp/connect-an-ai-assistant), then head to [MCP Tools](/docs/developers/build-with-the-mcp/mcp-tools) for the exact inputs and outputs of each tool.

<details>

<summary><strong>Related Topics</strong></summary>

* [MCP Tools](/docs/developers/build-with-the-mcp/mcp-tools)
* [Connect an AI Assistant](/docs/developers/build-with-the-mcp/connect-an-ai-assistant)
* [Authentication](/docs/developers/authentication)
* [Build with APIs](/docs/developers/building-with-apis)
* [Environments](/docs/developers/environments)

</details>


# Connect an AI Assistant

Step-by-step guide to connecting an external AI assistant to your Kizen Knowledge Catalogs over MCP using OAuth or API-key authentication.

{% hint style="success" %}
**Audience:** Any Kizen user connecting an AI assistant.

**Purpose:** Connect a supported AI assistant to Kizen and confirm it can read your Knowledge Catalogs.
{% endhint %}

{% hint style="warning" %}
**Warning:** Connecting an assistant grants it read access to your Knowledge Catalogs under your own permissions. Only connect assistants and clients you trust.
{% endhint %}

## Overview

You can connect an external AI assistant to <code class="expression">space.vars.Kizen\_company\_name</code> through the <code class="expression">space.vars.Kizen\_company\_name</code> MCP server so it can search your Knowledge Catalogs on your behalf. Connect your client using OAuth, or use the API-key method as an alternative for testing.

***

## Before You Begin

Make sure you have:

* An active <code class="expression">space.vars.Kizen\_company\_name</code> account with View permission on the catalogs you want the assistant to reach.
* A supported MCP client: the Claude app or Claude.ai, Claude Code, ChatGPT (via the Codex desktop app), or Gemini (via the Antigravity app).
* The MCP server endpoint URL. For more information, see [How the MCP Server Works](https://developer.kizen.com/docs/developers/build-with-the-mcp#how-the-mcp-server-works).

***

## Connect with Claude (Custom MCP Connector)

Whether you can add a custom MCP connector depends on your Claude account. On a personal account you can add your own. In a managed Team or Enterprise workspace, an administrator controls whether members can add custom connectors. If it's disabled, you'll see your existing connectors but no **Add custom connector** option, and an owner must add it for the workspace.

1. **Open Connector Settings**. In Claude, go to **Settings**, then **Connectors**.
2. **Add the Kizen MCP Connector**. Select **Add** **custom connector**, paste the MCP server URL: <https://app.go.kizen.com/api/mcp/readonly/>, and select **Add**. You don't need to enter a token because <code class="expression">space.vars.Kizen\_company\_name</code> handles sign-in through OAuth.&#x20;
3. **Connect and Authorize**. Select **Connect**. Claude opens <code class="expression">space.vars.Kizen\_company\_name</code> sign-in in your browser. Sign in, choose the business you want, and authorize. When you return, the MCP connector lists your catalogs. You can confirm by asking Claude to list the catalogs on the <code class="expression">space.vars.Kizen\_company\_name</code> MCP.

***

## Connect with Claude Code (CLI)

Add the server from the command line, then complete the browser sign-in when prompted:

```
claude mcp add --transport http kizen-mcp https://app.go.kizen.com/api/mcp/readonly/ --scope user
```

Sign in, select a business, and approve.

***

## Connect with ChatGPT (Codex Desktop App)

MCP can't be configured in ChatGPT on the web. Instead, use the Codex desktop app.

1. **Open MCP settings**. In the Codex app, go to **Settings** > **Integrations & MCP** and select **Add** server.
2. **Add the Kizen server**. Give it a name (for example, "<code class="expression">space.vars.Kizen\_company\_name</code>"), choose **Streamable HTTP** as the type, paste the MCP server URL, and **Save**.
3. **Authenticate**. Codex prompts you to Authenticate. Complete the OAuth sign-in in your browser, and then, in a new chat, confirm by asking Codex to list the catalogs on the <code class="expression">space.vars.Kizen\_company\_name</code> MCP.

***

## Connect with Gemini (Antigravity App)

Configure MCP in the Antigravity app (not the Gemini browser). Antigravity's Add MCP screen lists published partner connectors. To add a custom server, edit the MCP config file.

1. **Open the MCP config**. Go to **Settings** > **Customizations** > **Installed MCP Servers** > Open **MCP config**.
2. **Add the Kizen server**. Add an entry using the `serverUrl` key:

   ```
   { "mcpServers": { "kizen": { "serverUrl": "https://app.go.kizen.com/api/mcp/readonly" } } } 
   ```
3. **Authorize**. Antigravity signs in with OAuth (PKCE) and a local callback (port 8080). Authorize in the browser when prompted. The catalogs load. You can also let the agent sign in for you. For example: Add a custom MCP named <code class="expression">space.vars.Kizen\_company\_name</code> at <https://app.go.kizen.com/api/mcp/readonly/> and authenticate with PKCE.

***

## What's Next

Once you're connected, see [MCP Tools](/docs/developers/build-with-the-mcp/mcp-tools) for what each tool does, or revisit [Build with MCP](/docs/developers/build-with-the-mcp) for how the server and authentication work.

<details>

<summary><strong>Related Topics</strong></summary>

* [Build with MCP](/docs/developers/build-with-the-mcp)
* [Authentication](/docs/developers/authentication)
* [Generate API Credentials](/docs/developers/building-with-apis/generating-api-credentials)
* [Permissions](/docs/settings-and-administration/permissions)

</details>


# MCP Tools

Reference for Kizen's Knowledge Base MCP tools (listCatalogs, searchCatalog, and getDocument), including inputs, outputs, and behavior.

{% hint style="success" %}
**Audience:** Developers and integration engineers

**Purpose:** Look up each MCP tool's inputs, outputs, and behavior.
{% endhint %}

## Overview

The <code class="expression">space.vars.Kizen\_company\_name</code> MCP server exposes three tools for working with Knowledge Catalogs, which are sets of information sources that you can share across your business. Admins control which roles and team members can query each catalog. A connected assistant discovers these tools automatically and calls them as needed to answer questions from the catalogs you are allowed to access.

## Why Would I Use These Tools?

Use these tools to let an AI assistant answer questions from your <code class="expression">space.vars.Kizen\_company\_name</code> knowledge without anyone copying content out of <code class="expression">space.vars.Kizen\_company\_name</code>. The assistant finds the right catalog, searches it, and pulls the source document, all scoped to what you are allowed to see.

### listCatalogs

Lists the Knowledge Catalogs the connected user can access.

Inputs: none.

Returns: a list of the catalogs the user can access, with a total count, and for each catalog its `id`, `api_name`, and `description`.

### searchCatalog

Runs a semantic search across one or all accessible catalogs and returns the most relevant content.

Inputs:

* `query` (string, required): the search text.
* `n` (integer, optional, default 10): maximum number of results.
* `catalog` (string, optional): limit the search to one or more catalogs, by API name or UUID. Accepts multiple comma-separated values. To search all accessible catalogs, omit the `catalog` input.

Returns: matching content chunks as plain text, each with a source description, a snippet, and a relevance score.

### getDocument

Retrieves the full text of a single knowledge source.

Inputs:

* `source_id` (string, required): the source identifier, obtained from a `searchCatalog` result.

Returns: the source's metadata and its full, concatenated content.

## Behavior and Details

* Response format: All tools return plain text, not JSON, optimized for AI consumption.
* Tool annotations: Each tool advertises MCP annotations such as `readOnlyHint: true` and `destructiveHint: false`, so clients can tell these are safe, read-only tools.
* Permissions and scope: Results include only catalogs the user has View permission on, scoped to the authenticated business.
* Performance: A search adds roughly 200 to 500 ms for embedding.
* Errors: An unauthenticated request returns a JSON-RPC error. An unknown configuration slug returns 403.

***

## What's Next

For how the server and authentication work, see [Build with MCP](/docs/developers/build-with-the-mcp), or follow [Connect an AI Assistant](/docs/developers/build-with-the-mcp/connect-an-ai-assistant) to connect a client.

<details>

<summary><strong>Related Topics</strong></summary>

* [Build with MCP](/docs/developers/build-with-the-mcp)
* [Connect an AI Assistant](/docs/developers/build-with-the-mcp/connect-an-ai-assistant)
* [Authentication](/docs/developers/authentication)
* [Permissions](/docs/settings-and-administration/permissions)

</details>


# Settings Overview


# Permissions

Learn how Kizen permissions work and how to retrieve a user’s access rights using the permissions API.

{% hint style="success" %}
**Audience:** Admins, Developers, Solution Architects

**Purpose:** Explains how <code class="expression">space.vars.Kizen\_company\_name</code> permissions work and how to retrieve a user’s permissions using the API.
{% endhint %}

## Overview

<code class="expression">space.vars.Kizen\_company\_name</code>'s highly configurable permissions engine allows for fine-grained access control to objects, entities, and actions that can be taken. When using the API, it’s important to be aware what permissions the current user has.

To fetch the user’s current permissions, make a GET call to `/api/auth/access`. This endpoint takes no additional parameters, and simply returns a JSON object with the current user’s permissions:

```bash
curl -X GET "https://app.go.kizen.com/api/auth/access" \
 -H 'accept: application/json' 
```

The JSON response includes a number of fields that describe the user’s permissions:

### Section Permissions <a href="#section-permissions" id="section-permissions"></a>

The `sections` value in the JSON has permission information for specific features and parts of the app. These allow or deny access to things like dashboards, homepages, custom object creation, and other core features.

There are other permissions types you can set as well. See the following topics for more information on them:

* [Object Permissions](/docs/concepts/objects/object-configuration/object-permissions)
* [Contact Permissions](/docs/concepts/objects/contacts/contact-permissions)
* [Record Permissions](/docs/concepts/objects/records/record-permissions)

***

## What's Next

You can apply this information when building integrations, <code class="expression">space.vars.automations</code>, or plugins that need to respect user access and authorization rules within <code class="expression">space.vars.Kizen\_company\_name</code>.

<details>

<summary>Related Topics</summary>

* [Object Permissions](/docs/concepts/objects/object-configuration/object-permissions)
* [Contact Permissions](/docs/concepts/objects/contacts/contact-permissions)
* [Record Permissions](/docs/concepts/objects/records/record-permissions)

</details>


# Service Accounts

Learn how Kizen service accounts work, use the kizen.api client in Agentic Workflow Code Steps, manage API authentication and key rotation, and access REST API endpoints for integrations.

{% hint style="success" %}
**Audience:** Developers, Technical Builders

**Purpose:** Provides a complete technical reference for service accounts: how to use the new `kizen.api` client in Code Steps, how authentication works under the hood (signed keys vs. stored keys), the full REST API surface for managing integration accounts programmatically, and the extension points for engineers adding new account types or endpoints.
{% endhint %}

## Overview

A service account is a non-human employee <code class="expression">space.vars.entity</code> distinguished by its `account_type` field. Any value starting with `service_` is treated as a service account. Service accounts carry permission groups, can authenticate via API, and appear in the <code class="expression">space.vars.timeline</code>, but are excluded from billing counts, the public employee list, and (by default) team typeahead.

For a non-technical introduction to service accounts, see the [Service Accounts](https://support.kizen.com/support/solutions/articles/154000255193-service-accounts-overview) support article.

### Account Types

Two account types exist:

| Type                  | Description                                                                                                                                           |
| --------------------- | ----------------------------------------------------------------------------------------------------------------------------------------------------- |
| `service_automation`  | The **Agentic Workflow Code Account**, auto-provisioned per business. Used by Code Steps. Cannot be deleted, renamed, or have its `api_name` changed. |
| `service_integration` | **Integration accounts**, created manually or via API for external integrations such as Zapier or custom scripts.                                     |

A service account's status is either **Active** or **Suspended**. Status cannot be changed manually; service account is suspended automatically when its associated integration is disabled.

**Email is auto-generated** and never used for login. The default domain is `serviceaccounts.kizen.com`

***

## Kizen API Access from Code Steps

You do not need to create or manage an integration service account to call Kizen APIs from an <code class="expression">space.vars.automation</code> Code Step. The platform provides a preconfigured client, `kizen.api`, that authenticates automatically as the business's <code class="expression">space.vars.automation</code> Code Account.

* **No integration secrets needed.** Do not create a separate integration service account just to call Kizen from a code step.
* **Use** `kizen.api` **directly.** It is preconfigured with the <code class="expression">space.vars.automation</code> service account; you do not create it, configure it, or pass credentials.
* **The API root URL is built in.** Pass only the path, not the full URL.
  * Correct: `res = kizen.api.get("/custom-objects")`
  * Incorrect: `res = kizen.api.get("https://app.fmo.kizen.com/api/custom-objects")`

The client supports the standard HTTP verbs — `get`, `post`, `patch`, `put`, `delete` — and returns response <code class="expression">space.vars.objects</code> that behave like standard `requests` responses, with `.json()` and `.raise_for_status()` available.

Here's an example request:

```python
res = kizen.api.get("/custom-objects")
res.raise_for_status()
number_of_custom_objects = res.json()['count']
```

***

## Authentication

Authentication is handled automatically for each account type:

* **Agentic Workflow Code Account:** Uses short-lived signed keys minted per execution when calling the platform via `kizen.api`. No credential management is required.
* **Integration Service Accounts:** Use stored API keys. Each account supports up to two keys (primary and secondary). Rotating a key promotes the new key to primary and demotes the previous primary to secondary.

***

## Permissions and Guardrails

Management is governed by the `MANAGE_SERVICE_ACCOUNTS` settings permission. Three permission levels apply:

| Level           | Allowed Actions                                      |
| --------------- | ---------------------------------------------------- |
| **View (Read)** | List, retrieve, view primary/secondary tokens        |
| **Write**       | Create, update, rotate token, delete secondary token |
| **Remove**      | Archive (delete) an integration account              |

**Additional guardrails:**

* A service account cannot create its own API keys.
* A service account can export business config but cannot import it.
* The <code class="expression">space.vars.automation</code> Code Account cannot be deleted, renamed, or have its `api_name` changed.
* Service accounts are excluded from billing seat counts and the public employee list.
* Service accounts are excluded from team typeahead by default. Pass `include_service_accounts=true` to include them.

***

## What's Next

The most common next step after reading this reference is writing or modifying an <code class="expression">space.vars.automation</code> code step that uses `kizen.api`. See [Agentic Workflow Code Steps ](/docs/concepts/agentic-workflows/automation-code-steps)for the full authoring guide, including available helpers, runtime behavior, and patterns for working with Kizen data from inside a step.

<details>

<summary>Related Topics</summary>

* [Authentication](/docs/developers/authentication)
* [Agentic Workflow Code Steps](/docs/concepts/agentic-workflows/automation-code-steps)
* [Agentic Workflows](/docs/concepts/agentic-workflows)

</details>


# Objects

A foundational guide to Kizen Objects covering data modeling, Records, relationships, Agentic Workflows, Contacts, and API usage for admins, developers, and solution architects.

## Overview

<code class="expression">space.vars.objects</code> are a foundational platform data type in <code class="expression">space.vars.Kizen\_company\_name</code> used to model, organize, and store business information, much like a container.

Each <code class="expression">space.vars.object</code> defines the structure for a type of data, including its fields, relationships, and behavior. Records created from <code class="expression">space.vars.objects</code> represent individual real-world entities such as customers, locations, deals, or assets.

Once <code class="expression">space.vars.objects</code> are created, you can:

* Add custom fields to capture structured information
* Define relationships to other <code class="expression">space.vars.objects</code>
* Create Forms, Surveys, or <code class="expression">space.vars.activities</code> to collect your <code class="expression">space.vars.object</code> data.
* Trigger <code class="expression">space.vars.automations</code>
* Read and write data through APIs

***

## Objects Mastery Checklist

Explore the following topics to understand how <code class="expression">space.vars.objects</code> are defined and used in <code class="expression">space.vars.Kizen\_company\_name</code>.

**Core Knowledge**

* [ ] [What an Object represents and when to use it](/docs/concepts/objects/object-core-concepts#how-objects-are-used)
* [ ] [What a Contact Object is and how it differs from a standard ](/docs/concepts/objects/object-core-concepts#objects-vs-contacts)
* [ ] [How Objects fit into Kizen's overall data model](/docs/concepts/objects/object-data-model#data-structure)

**Object Features**

* [ ] [How to create various Workflows](/docs/concepts/objects/object-configuration/object-workflows)
* [ ] [Understanding how Records work within an Object](/docs/concepts/objects/object-data-model#records)
* [ ] [Know how custom fields define your data](/docs/concepts/objects/object-data-model#fields)

**Configuration & Data Model**

* [ ] [How Objects define schemas and associations](/docs/concepts/objects/object-data-model#data-structure)
* [ ] [How Object field types are defined](/docs/concepts/objects/object-data-model#fields)

**Relationships**

* [ ] [How Objects relate to Activities](/docs/concepts/objects/object-core-concepts#how-objects-are-used)
* [ ] [How Object relationship types affect visibility and behavior](/docs/concepts/objects/object-configuration/object-relationships#relationship-types)

**Access & Control**

* [ ] [How Object permissions affect creating, viewing, and modifying Objects](/docs/concepts/objects/object-configuration/object-permissions)
* [ ] [Understanding Team Associations](/docs/concepts/objects/object-configuration/object-relationships#team-associations)
* [ ] [How access to primary and associated records impacts visibility](/docs/concepts/objects/object-configuration/object-relationships#primary-vs-additional-relationships)

**APIs**

* [ ] [How to list and search for Objects via API](/docs/concepts/objects/object-apis/list-and-search-objects-api)
* [ ] [How to view Object Record details via API](/docs/concepts/objects/object-apis/retrieve-object-details-by-id-api)

***

## What's Next

Next, explore the [Objects Core Concepts](/docs/concepts/objects/object-core-concepts) to understand how <code class="expression">space.vars.object</code> fields, relationships, identifiers, and <code class="expression">space.vars.entities</code> are structured behind the scenes.

From there, you can dive deeper into field types and validation rules, relationship behavior, permissions and access control, API schemas for <code class="expression">space.vars.entities</code>, and how <code class="expression">space.vars.contacts</code> relate to <code class="expression">space.vars.entities</code>.

<details>

<summary>Related Topics</summary>

* [Object Core Concepts](/docs/concepts/objects/object-core-concepts)
* [Object Data Model](/docs/concepts/objects/object-data-model)
* [Object Relationships](/docs/concepts/objects/object-configuration/object-relationships)
* [Object Layout Customization](/docs/concepts/objects/object-configuration/object-layout-customization)
* [Objects Permissions](/docs/concepts/objects/object-configuration/object-permissions)
* [Object APIs](/docs/concepts/objects/object-apis)

</details>


# Object Core Concepts

Learn how Objects define data models in Kizen, including fields, Records, relationships, object types, and architectural implications for Agentic Workflows, reporting, and APIs.

{% hint style="success" %}
**Audience:** Admins, Developers, and Solution Architects

**Purpose:** Explains the foundational architecture of <code class="expression">space.vars.objects</code> in <code class="expression">space.vars.Kizen\_company\_name</code>, including how schemas, fields, <code class="expression">space.vars.entities</code>, and relationships work together to support scalable data models, <code class="expression">space.vars.automation</code>, reporting, and integrations.
{% endhint %}

## Overview

<code class="expression">space.vars.objects</code> are the foundation of how all data is structured in the platform. They determine what fields are available, how <code class="expression">space.vars.entities</code> relate to one another, and which system behaviors are enabled. <code class="expression">space.vars.objects</code> provide the structure, fields define the details, and <code class="expression">space.vars.entities</code> store the actual data.

<div data-with-frame="true"><figure><img src="/files/OYwHQwtRTEKv5nSP0REd" alt="" width="563"><figcaption></figcaption></figure></div>

The <code class="expression">space.vars.Kizen\_company\_name</code> platform supports two <code class="expression">space.vars.object</code> configurations:&#x20;

* **Standard Objects**: used to model structured data for storage, reference, and organization.
* **Workflow Objects**: used to model process-driven data that moves through stages. They extend Standard <code class="expression">space.vars.object</code> behavior, adding stage management and optional pipeline reporting.

The platform remains flexible and can support a wide range of use cases beyond these common patterns. For example, a Standard <code class="expression">space.vars.object</code> can still track values without becoming a <code class="expression">space.vars.workflow</code>, and a <code class="expression">space.vars.workflow</code> can be used without enabling value tracking. This flexibility allows you to design data models that match your business needs while maintaining consistent behavior across <code class="expression">space.vars.automation</code>, reporting, and integrations.

### System Behaviors

The following behaviors describe how data is structured and behaves across the platform.

* **Objects contain the structure:** <code class="expression">space.vars.objects</code> function like a container that holds the schema, fields, relationships, and behavior for a type of data.
* **Fields define the structure:** Fields are configured on the <code class="expression">space.vars.object</code>, but Field values exist only on individual <code class="expression">space.vars.entities</code>.
* **Records contain the data:** <code class="expression">space.vars.entities</code> represent individual real-world items and store the actual data entered by users or integrations.
* **Relationships connect Records:** Relationships link <code class="expression">space.vars.entities</code> across <code class="expression">space.vars.objects</code> and enable navigation, <code class="expression">space.vars.automation</code>, and reporting.

For more information, see [Object Data Model](/docs/concepts/objects/object-data-model).

***

## Why Objects Matter

<code class="expression">space.vars.objects</code> form the structural foundation of the platform’s data model and directly determine how reliable reporting, <code class="expression">space.vars.automation</code>, integrations, and governance function at scale.

{% columns %}
{% column %}
A well-designed <code class="expression">space.vars.object</code> model enables:

* Accurate reporting and <code class="expression">space.vars.dashboards</code>
* Predictable <code class="expression">space.vars.automation</code> behavior
* Scalable integrations
* Clean data governance
* Reusable configuration across teams
  {% endcolumn %}

{% column %}
Poor <code class="expression">space.vars.object</code> design often leads to:

* Overly complex <code class="expression">space.vars.automations</code>
* Confusing <code class="expression">space.vars.entity</code> relationships
* Confusing end-user UX
* Reporting that cannot scale
* Redundant data
  {% endcolumn %}
  {% endcolumns %}

***

## Objects vs Contacts

<code class="expression">space.vars.contacts</code> are a specialized type of <code class="expression">space.vars.object</code> designed specifically for managing people. They behave like Standard <code class="expression">space.vars.objects</code> and represent a person and their data.

While fundamentally they behave similarly, there are a few key distinctions between them:

| Aspect                                                                                                                    | Contacts                                                                     | Custom Objects                                         |
| ------------------------------------------------------------------------------------------------------------------------- | ---------------------------------------------------------------------------- | ------------------------------------------------------ |
| Always present regardless of permissions                                                                                  | No                                                                           | No                                                     |
| Accessible via <code class="expression">space.vars.objects</code>/ <code class="expression">space.vars.entity</code> APIs | No                                                                           | Yes                                                    |
| Supports <code class="expression">space.vars.fields</code>                                                                | Yes                                                                          | Yes                                                    |
| Can relate to other <code class="expression">space.vars.objects</code>                                                    | Yes                                                                          | Yes                                                    |
| Schema flexibility                                                                                                        | Limited (<code class="expression">space.vars.workflows</code> not available) | Fully configurable                                     |
| Optimized for Communication, Email & SMS                                                                                  | Yes                                                                          | No                                                     |
| Unique Identifier                                                                                                         | Email                                                                        | <code class="expression">space.vars.entity</code> Name |

For more information, see [Contacts](/docs/concepts/objects/contacts).

***

## How Objects Are Used

<code class="expression">space.vars.objects</code> support many of the platform’s most powerful capabilities, including:

* **Workflows and lifecycle tracking:** Deals, onboarding flows, ticket lifecycles, project stages
* **Cross-Object Agentic Workflows:** Triggering <code class="expression">space.vars.entity</code> creation or updates in one object when another changes stage
* **Activity logging with cross-Record updates:** Logging an <code class="expression">space.vars.activity</code> on a <code class="expression">space.vars.contact</code> that updates fields on a related Ticket
* **Dashboards and reporting:** Aggregated metrics and insights based on <code class="expression">space.vars.object</code> fields and stages
* **API integrations:** External systems creating, updating, and relating <code class="expression">space.vars.entities</code> programmatically
* **Complex data modeling:** Supporting domains such as insurance, healthcare, and financial services

<code class="expression">space.vars.objects</code> provide the abstraction layer that makes all of this possible without hardcoding business logic.

### Object Configurations

<code class="expression">space.vars.objects</code> share the same foundation, but behave differently based on how they are configured. The configuration you choose affects how data flows through the system, how users interact with <code class="expression">space.vars.entities</code>, and how reporting and <code class="expression">space.vars.automation</code> behave.

#### Standard Configuration

Use when <code class="expression">space.vars.entities</code> represent structured data that does not move through stages.

* No stages or lifecycle
* Not shown in pipeline <code class="expression">space.vars.dashboards</code> or board views
* Supports fields, relationships, <code class="expression">space.vars.automations</code>, and APIs
* Common for reference or structured data (e.g., Locations, Policies, Assets, Providers)

#### Workflow Configuration

Use when <code class="expression">space.vars.entities</code> represent work that moves through a process or lifecycle.

* Includes stages and board (kanban) views
* Supports stage-based <code class="expression">space.vars.automation</code>
* Powers <code class="expression">space.vars.dashboards</code> and <code class="expression">space.vars.workflow</code> reporting
* Optional tracking for value and percent chance to close
* Common for Deals, Tickets, Applications, Projects, Cases, Reviews, and similar processes

### Choosing the Right Object Configuration

<table><thead><tr><th width="374">If your records...</th><th>Use this type</th></tr></thead><tbody><tr><td>Store structured data without lifecycle</td><td>Standard Configuration</td></tr><tr><td>Move through stages and require reporting on time in stage</td><td><code class="expression">space.vars.workflow</code> Configuration</td></tr><tr><td>Represent operational processes with heavy automation</td><td><code class="expression">space.vars.workflow</code> Configuration</td></tr><tr><td>Need to track monetary values</td><td>Standard or <code class="expression">space.vars.workflow</code> Configuration with <strong>Track Entity $ Value</strong> enabled</td></tr><tr><td>Track monetary values in a sales pipeline</td><td><code class="expression">space.vars.workflow</code> Configuration with <strong>Track Entity $ Value</strong> and <strong>Include % Chance to Close</strong> enabled</td></tr></tbody></table>

For more information on <code class="expression">space.vars.object</code> Configurations, see [Object Data Model](/docs/concepts/objects/object-core-concepts).

***

## Object Name vs Record Name

The platform distinguishes between <code class="expression">space.vars.object</code>-level labels (collection names) and <code class="expression">space.vars.entity</code>-level labels (instance names), each used in different UI and API contexts.

<code class="expression">space.vars.object</code> names are primarily used for navigation and structural labeling. <code class="expression">space.vars.entity</code> name fields are used to represent individual instances within an <code class="expression">space.vars.object</code>.

In addition to display labels, every <code class="expression">space.vars.entity</code> is assigned a system-generated backend name, which functions as the authoritative identifier for APIs, integrations, and internal references. Implementations should rely on this backend identifier rather than display labels.

<code class="expression">space.vars.objects</code> also have API names. For more information see [Object API Names](/docs/concepts/objects/object-apis/object-api-names).

***

## Key Use Cases

<code class="expression">space.vars.objects</code> support the following industry use cases:

### Industry Examples

{% tabs %}
{% tab title="Insurance" %}

#### Insurance Teams Modeling Policy and Operational Data

<code class="expression">space.vars.objects</code> provide the data foundation for insurance platforms by modeling real business entities such as policies, applications, claims, and accounts. This enables structured data capture, cross-<code class="expression">space.vars.object</code> relationships, reporting, and automation across the entire policy lifecycle.

Insurance teams use <code class="expression">space.vars.objects</code> to define consistent data models that support underwriting, servicing, compliance, renewals, and integration with external systems.

#### Examples include:

* Creating a Policy <code class="expression">space.vars.object</code> to store structured data such as policy number, coverage type, effective dates, carrier, premium amount, and status
* Defining an Application <code class="expression">space.vars.object</code> to track intake details, applicant information, risk attributes, and underwriting requirements
* Modeling a Claim <code class="expression">space.vars.object</code> with fields for loss type, incident date, adjuster assignment, reserve amounts, and claim status
* Using a Renewal <code class="expression">space.vars.object</code> with a workflow configuration to have stages such as Pending Review, Offered, Accepted, and Lapsed to manage retention workflows

#### How <code class="expression">space.vars.object</code>s Help:

* Establish a consistent, scalable data model for policies, applications, claims, and related <code class="expression">space.vars.entities</code>
* Enable relationships between <code class="expression">space.vars.entities</code>, such as linking a policy to a contact, agency, carrier, or claim
* Support lifecycle management using an <code class="expression">space.vars.object</code> with a <code class="expression">space.vars.workflow</code> configuration for renewals, onboarding, or claims processing
* Power reporting, <code class="expression">space.vars.dashboards</code>, and forecasting based on structured fields like premium value, status, and stage
* Enable <code class="expression">space.vars.automation</code> and integrations, such as creating renewal <code class="expression">space.vars.entities</code> when policies near expiration or syncing policy data to external policy administration systems via APIs and webhooks
  {% endtab %}

{% tab title="Healthcare" %}

#### Healthcare Teams Modeling Clinical and Operational Data

<code class="expression">space.vars.objects</code> provide the data foundation for healthcare <code class="expression">space.vars.workflows</code> by modeling real-world entities such as patients, referrals, appointments, care plans, and cases. This enables structured data capture, secure relationships between <code class="expression">space.vars.entities</code>, and scalable <code class="expression">space.vars.automation</code> across clinical and administrative processes.

Healthcare teams use <code class="expression">space.vars.objects</code> to define consistent data models that support care coordination, intake management, operational <code class="expression">space.vars.workflows</code>, and integration with external systems.

#### Examples include:

* Creating a Patient Intake <code class="expression">space.vars.object</code> to capture structured data such as demographics, referral source, insurance details, and consent status
* Defining a Referral <code class="expression">space.vars.object</code> to track referring provider, specialty, urgency level, and acceptance status
* Modeling an Appointment <code class="expression">space.vars.object</code> with fields for visit type, scheduled date, assigned provider, and attendance status
* Using a Care Pathway <code class="expression">space.vars.object</code> with a <code class="expression">space.vars.workflow</code> configuration to create stages such as Intake, Evaluation, Treatment, Follow-Up, and Completed

#### How Objects Help:

* Establish a consistent, scalable data model for clinical and operational <code class="expression">space.vars.entities</code>
* Enable relationships between <code class="expression">space.vars.entities</code>, such as linking patients to referrals, providers, appointments, and care plans
* Support lifecycle management using an <code class="expression">space.vars.object</code> with a <code class="expression">space.vars.workflow</code> configuration for referrals, treatment <code class="expression">space.vars.workflows</code>, and discharge processes
* Power reporting and <code class="expression">space.vars.dashboards</code> for operational visibility, such as referral volume, appointment throughput, and care outcomes
* Enable <code class="expression">space.vars.automation</code> and integrations, such as creating follow-up <code class="expression">space.vars.entities</code> when appointments are completed or synchronizing patient data with EHR systems through APIs and webhook events
  {% endtab %}

{% tab title="Financial Services" %}

#### Financial Services Teams Modeling Client and Financial Data

<code class="expression">space.vars.objects</code> provide the data foundation for financial services workflows by modeling real-world entities such as clients, accounts, opportunities, portfolios, and service cases. This enables structured data capture, relationship modeling, reporting, and <code class="expression">space.vars.automation</code> across advisory, banking, and operations functions.

Financial services teams use <code class="expression">space.vars.objects</code> to define consistent data models that support client onboarding, relationship management, compliance tracking, and lifecycle-based engagement.

#### Examples include:

* Creating a Client Profile <code class="expression">space.vars.object</code> to store structured data such as household details, risk tolerance, investment goals, and regulatory classifications
* Defining an Account <code class="expression">space.vars.object</code> to track account types, custodians, balances, and account status
* Modeling an Opportunity <code class="expression">space.vars.object</code> to manage advisory engagements with fields for estimated assets, probability to close, and expected close date
* Using a Client Lifecycle <code class="expression">space.vars.object</code> with a <code class="expression">space.vars.workflow</code> configuration to create stages such as Prospect, Onboarded, Active Client, Review Due, and At Risk

#### How Objects Help:

* Establish a consistent, scalable data model for clients, accounts, opportunities, and portfolios
* Enable relationships between <code class="expression">space.vars.entities</code>, such as linking clients to households, accounts, advisors, and service requests
* Support lifecycle management using an <code class="expression">space.vars.object</code> with a <code class="expression">space.vars.workflow</code> configuration for onboarding, engagement management, and retention <code class="expression">space.vars.workflows</code>
* Power dashboards and reporting for visibility into AUM, pipeline value, client segmentation, and service performance
* Enable <code class="expression">space.vars.automation</code> and integrations, such as creating onboarding <code class="expression">space.vars.entities</code> when a client is won or synchronizing client and account data with CRMs, custodial platforms, and external financial systems through APIs and webhook events
  {% endtab %}
  {% endtabs %}

***

## What's Next

Learn more about working with [Records](/docs/concepts/objects/records), then explore [Custom Fields](/docs/concepts/objects/custom-fields) to extend <code class="expression">space.vars.object</code> schemas and [Object Permissions](/docs/concepts/objects/object-configuration/object-permissions) to manage access.

<details>

<summary>Related Topics</summary>

* [Object Data Model](/docs/concepts/objects/object-data-model)
* [Object Relationships](/docs/concepts/objects/object-configuration/object-relationships)
* [Object Layout Customization](/docs/concepts/objects/object-configuration/object-layout-customization)
* [Object Permissions](/docs/concepts/objects/object-configuration/object-permissions)
* [Object APIs](/docs/concepts/objects/object-apis)

</details>


# Object Data Model

Reference documentation for the Custom Objects data model in Kizen, including object identifiers, records, fields, relationships, and API behavior.

{% hint style="success" %}
**Audience:** Developers and Solution Architects

**Purpose:** Explains how <code class="expression">space.vars.objects</code> are structured in <code class="expression">space.vars.Kizen\_company\_name</code>, including how <code class="expression">space.vars.entity</code>s, fields, identifiers, and relationships behave across the platform.
{% endhint %}

## Overview

<code class="expression">space.vars.objects</code> define the canonical data structures used across <code class="expression">space.vars.Kizen\_company\_name</code> to store, relate, and operate on business data. They provide the schema layer that governs how <code class="expression">space.vars.entities</code> are created, validated, related, and accessed.

This page defines the <code class="expression">space.vars.objects</code> data model, including <code class="expression">space.vars.object</code> definitions, <code class="expression">space.vars.entity</code> instances, fields, identifiers, and relationship mechanics. It builds on concepts introduced in the [Object Core Concepts](/docs/concepts/objects/object-core-concepts).

### How Objects Are Identified

<code class="expression">space.vars.objects</code> and <code class="expression">space.vars.entities</code> in <code class="expression">space.vars.Kizen\_company\_name</code> are identified using a combination of system-generated IDs and API-facing identifiers. Each plays a different role across the platform, including UI navigation, API operations, <code class="expression">space.vars.automations</code>, and data imports.

#### System-Generated Identifiers

<code class="expression">space.vars.Kizen\_company\_name</code> assigns immutable, system-generated IDs that uniquely identify data within a Business. These identifiers form the canonical identity layer of the platform.

Every <code class="expression">space.vars.object</code> and <code class="expression">space.vars.entity</code> has the following system-generated identifiers:

* **`custom_object_id`**  – schema-level identifier
* **`record_id`**  – instance-level identifier

#### **What Is A** `custom_object_id`?

A `custom_object_id` uniquely identifies an <code class="expression">space.vars.object</code> definition. It is used internally by the platform and APIs to reference the <code class="expression">space.vars.object</code>’s schema and configuration.

**What it identifies**

* The <code class="expression">space.vars.object</code>’s schema
* Field definitions
* Relationship definitions
* Configuration type (Standard or Workflow)

**What it’s used for**

* Retrieving or describing <code class="expression">space.vars.object</code> schemas
* Determining which fields and relationships exist
* Applying validation rules to <code class="expression">space.vars.entities</code>
* Driving configuration-dependent behavior in APIs and <code class="expression">space.vars.automations</code>

**Key characteristics**

* **Schema-level**: identifies the structure, not the data
* **Stable**: does not change if the <code class="expression">space.vars.object</code> is renamed
* **System-generated:** typically represented as a UUID-style identifier

#### What Is A `record_id` ?

A `record_id` uniquely identifies a single <code class="expression">space.vars.entity</code> instance that belongs to an <code class="expression">space.vars.object</code>.

**What it identifies**

* One specific data <code class="expression">space.vars.entity</code> (for example, a single policy, ticket, or claim)
* The stored field values for that <code class="expression">space.vars.entity</code>
* References to related <code class="expression">space.vars.entities</code>

**What it’s used for**

* Creating, retrieving, updating, or deleting <code class="expression">space.vars.entities</code>
* Linking <code class="expression">space.vars.entities</code> through relationships
* Displaying data in timelines, dashboards, and reports
* Triggering <code class="expression">space.vars.automations</code> based on <code class="expression">space.vars.entity</code>-level events

**Key characteristics**

* **Instance-level**: it identifies data, not structure
* **Stable**: it does not change if field values or display names change

The platform needs stable, unambiguous references to both the schema (`custom_object_id`) and the specific data instance (`record_id`) in order to operate reliably across APIs, relationships, <code class="expression">space.vars.automations</code>, and <code class="expression">space.vars.timelines</code>.

### API-Facing Identifiers&#x20;

In addition to system-generated IDs, <code class="expression">space.vars.Kizen\_company\_name</code> exposes API-facing identifiers. In API requests, <code class="expression">space.vars.objects</code> are referenced by API name.&#x20;

These include:

* **Object API names** (for example, `deals`, `policies`)
* **Field API names** used in API payloads (for example, `email`, `name`)

API-facing identifiers:

* Are commonly used in API requests, <code class="expression">space.vars.automations</code>, and imports
* Allow <code class="expression">space.vars.entities</code> to be located without knowing internal IDs
* Resolve to system-generated identifiers internally

These API-facing identifiers resolve to system-generated IDs internally to ensure consistency and data integrity.

***

## Object Lifecycle

The <code class="expression">space.vars.object</code> lifecycle governs how a <code class="expression">space.vars.object</code>’s schema is created, evolved, and eventually retired. This lifecycle affects how <code class="expression">space.vars.entities</code> are validated and interpreted, but it does not directly manipulate stored data.

* **Object created → schema defined:** Creating an <code class="expression">space.vars.object</code> establishes a new schema, including its fields, relationships, configuration type (Standard or Workflow), and validation rules. At this stage, no <code class="expression">space.vars.entities</code> exist, only the structure they will conform to.
* **Schema modified → validation rules updated:** Changes to an <code class="expression">space.vars.object</code>—such as adding fields, updating required rules, or modifying relationships—updates the schema that governs future <code class="expression">space.vars.entity</code> writes. These changes affect how new or updated <code class="expression">space.vars.entities</code> are validated but do not automatically alter existing stored values.
* **Object deleted → schema removed:** Deleting an <code class="expression">space.vars.object</code> permanently removes the <code class="expression">space.vars.object</code> schema and deletes all associated Records. This cannot be undone.

Schema changes apply uniformly across all <code class="expression">space.vars.entities</code> for an <code class="expression">space.vars.object</code>. Field types are immutable, and existing field values are not changed unless a <code class="expression">space.vars.entity</code> is explicitly updated.

{% hint style="info" %}
**Note:** An <code class="expression">space.vars.object</code> cannot be deleted if it contains unarchived records. If unarchived <code class="expression">space.vars.entities</code> exist, the delete request returns a `400` error and the deletion does not proceed. Archive all <code class="expression">space.vars.entities</code> before attempting to delete the <code class="expression">space.vars.object</code>.
{% endhint %}

***

## Data Structure

Every <code class="expression">space.vars.object</code> is composed of three core elements: fields, relationships, and <code class="expression">space.vars.entities</code>. Together, these define both the structure of the data and how data behaves across the system.

<div data-with-frame="true"><figure><img src="/files/ISme1eqr0Vn4R7WKOyRw" alt="" width="563"><figcaption></figcaption></figure></div>

### Custom Fields

<code class="expression">space.vars.fields</code> define the schema of an <code class="expression">space.vars.object</code>. They determine what data can be stored on <code class="expression">space.vars.entities</code> and how that data is validated and used across the platform.

Fields specify:

* The type of data (text, number, date, select, relationship, etc.)
* Whether the data is required, read-only, or required only in specific contexts
* How the data participates in <code class="expression">space.vars.automations</code>, reporting, integrations, and UI behavior

<code class="expression">space.vars.fields</code> belong to the <code class="expression">space.vars.object</code>, not to individual <code class="expression">space.vars.entities</code>. <code class="expression">space.vars.objects</code> support dynamic, business-defined schemas, allowing each organization to extend its data model without requiring code changes.

Each newly created <code class="expression">space.vars.object</code> includes several system fields that cannot be removed, including:

* \<Object> Name
* Owner
* Display Name
* Date Created
* Last Modified&#x20;

<code class="expression">space.vars.objects</code> with <code class="expression">space.vars.workflow</code> enabled also include Stage, Estimated Close Date, and Actual Close Date. For <code class="expression">space.vars.objects</code>, Name and Owner are the only required fields (Stage is also required when <code class="expression">space.vars.workflow</code> is enabled). All other fields, including <code class="expression">space.vars.fields</code>, are optional.&#x20;

Contact records follow the same model but include additional required fields because they function as unique identity <code class="expression">space.vars.entities</code>.

<code class="expression">space.vars.fields</code> and relationships define schema only. They do not store data themselves. For more information, see [Custom Fields](/docs/concepts/objects/custom-fields).

### Records

<code class="expression">space.vars.entities</code> are the actual instances of data created using an <code class="expression">space.vars.object</code>’s schema.

Each <code class="expression">space.vars.entity</code>:

* Stores field values
* Represents a real-world entity (such as a policy, ticket, client, or claim)
* Can be related to other <code class="expression">space.vars.entities</code>

While <code class="expression">space.vars.objects</code> define structure and fields define validation rules, <code class="expression">space.vars.entities</code> contain the actual data. <code class="expression">space.vars.entity</code> data is stored as a set of field values, where each value is associated with a specific field definition and validated against the <code class="expression">space.vars.object</code>’s schema at write time.

Schema changes affect how future writes are validated but do not retroactively modify existing stored values unless explicitly written. For more information, see [Records](/docs/concepts/objects/records).

### Relationships

Relationships define how <code class="expression">space.vars.entity</code>s connect to one another across <code class="expression">space.vars.objects</code>. They are implemented as a specialized field type and always connect <code class="expression">space.vars.entity</code> to <code class="expression">space.vars.entity</code>, not <code class="expression">space.vars.object</code> to <code class="expression">space.vars.object</code>.

Relationships enable:

* Linking related business data (for example, a policy to a contact, or a claim to a policy)
* Cross-<code class="expression">space.vars.object</code> <code class="expression">space.vars.automations</code> and updates, including between <code class="expression">space.vars.entities</code> of the same <code class="expression">space.vars.object</code>
* Accurate reporting across connected <code class="expression">space.vars.entities</code>

A relationship is defined at the <code class="expression">space.vars.object</code> level as a field, but its value is stored on individual Records as a reference to another <code class="expression">space.vars.entity</code>. Relationship values are stored alongside other field values and follow the same validation and lifecycle rules.

When a relationship field is created, an inverse relationship field is automatically created on the related <code class="expression">space.vars.object</code>. <code class="expression">space.vars.entity</code>-level updates to a relationship are reflected on both sides, enabling bi-directional navigation between related <code class="expression">space.vars.entities</code>.

For more information, [Object Relationships](/docs/concepts/objects/object-configuration/object-relationships).

### How These Pieces Work Together

<code class="expression">space.vars.object</code>s define schema. Custom Fields and relationships describe structure and rules. <code class="expression">space.vars.entities</code> store values that conform to that schema, including references to other <code class="expression">space.vars.entities</code> through relationship fields.

<div data-with-frame="true"><figure><img src="/files/I4AIzfW0fQTnKhhKAnPd" alt="" width="375"><figcaption></figcaption></figure></div>

This separation between schema metadata and <code class="expression">space.vars.entity</code> data allows <code class="expression">space.vars.objects</code> to evolve independently of stored values while supporting reliable validation, <code class="expression">space.vars.automations</code>, and scalable integrations across the platform.

***

## Object Configurations

All <code class="expression">space.vars.objects</code> share a common architectural foundation, but differ in behavior depending on how they are configured. Understanding the different <code class="expression">space.vars.object</code> configurations is critical when designing data models, <code class="expression">space.vars.automations</code>, reporting, and integrations.

The platform supports the following configurations:

* Standard Configuration
* Workflow Configurations

#### Standard Configuration

<div data-with-frame="true"><figure><img src="/files/pzOTzZcIXBbR1S519Otd" alt="" width="563"><figcaption></figcaption></figure></div>

Standard configurations are used to model structured data that does not move through a defined lifecycle and does not require stage-based or value-based tracking. They are best suited for reference or classification data rather than process-driven work.

**Standard configurations:**

* Include default system fields such as Name, Owner, and Date Created
* Support all <code class="expression">space.vars.field</code> types and relationships
* Are fully accessible through <code class="expression">space.vars.automations</code> and APIs
* Do not support stages, board (kanban) views, or pipeline dashboards
* Do not include system fields for value tracking or forecasting

Common use cases include assets, providers, advisors, facilities, locations, insurance plans, policies, and carriers. Use a standard configuration when you need structured records with consistent fields and relationships, but no lifecycle stages or pipeline-style reporting.

#### Workflow Configuration

<div data-with-frame="true"><figure><img src="/files/WKLYwjeXAelatETYtXA8" alt="" width="563"><figcaption></figcaption></figure></div>

<code class="expression">space.vars.workflow</code> configurations are used to model <code class="expression">space.vars.entities</code> that move through a defined lifecycle and require visibility into progress, status, and outcomes. They are designed for work in progress, transactions, or coordinated processes that evolve over time.

They use the same underlying mechanics often referred to as *pipeline behavior*. A configuration is considered a <code class="expression">space.vars.workflow</code> when its primary purpose is to coordinate process execution or track a business asset as it progresses through a defined set of stages, rather than represent a static business <code class="expression">space.vars.entity</code>.

<code class="expression">space.vars.workflow</code> configurations:

* Include all capabilities of Standard configurations, including <code class="expression">space.vars.fields</code>, relationships, <code class="expression">space.vars.automations</code>, and API access
* Support defined stages to represent lifecycle progression or process steps
* Support board views for visual management
* Enable stage-based <code class="expression">space.vars.automations</code>
* Power <code class="expression">space.vars.dashboards</code>, operational reporting, and analytics
* Support value tracking and percent chance to close when enabled

<code class="expression">space.vars.workflow</code> configurations also include additional system-managed fields such as:

* Stage
* Entity Value (optional)
* Estimated Close Date
* Actual Close Date (system-managed)
* Percent Chance to Close (optional)
* Reasons Lost (conditional)

Common use cases include lifecycle-driven or process-oriented <code class="expression">space.vars.entities</code> such as deals, tickets, applications, renewals, onboarding flows, claims, projects, cases, implementations, escalations, compliance reviews, and service delivery.

Use a <code class="expression">space.vars.workflow</code> configuration when records move through defined stages, stage transitions drive <code class="expression">space.vars.automations</code>, and visibility into progress or outcomes is required across teams or systems. A Workflow configuration can also be used as a sales pipeline by enabling **Track Entity Value** and **Percent Chance to Close**.

#### Architectural Implications

The choice between Standard and <code class="expression">space.vars.workflow</code> configuration has significant architectural consequences. It determines which system-managed fields exist on an <code class="expression">space.vars.object</code>, how <code class="expression">space.vars.entities</code> participate in lifecycle-driven features, how <code class="expression">space.vars.automations</code> execute, and whether data can be used in dashboards, forecasting, and stage-based reporting.

<code class="expression">space.vars.workflow</code> configurations include additional system-managed fields—such as **Stage** and **Percent Chance to Close**—that are intrinsic to the <code class="expression">space.vars.workflow</code> model. These capabilities cannot be added to Standard configurations after the fact. Choosing the wrong configuration often requires recreating the <code class="expression">space.vars.object</code> to enable workflow-specific behavior.

Configuration choice also affects <code class="expression">space.vars.automation</code> timing, event behavior, relationship design, and long-term scalability. Relationships introduced early in a data model can create dependencies across <code class="expression">space.vars.objects</code> that are difficult to reverse without significant refactoring.

#### API Implications

Standard and <code class="expression">space.vars.workflow</code> configurations use different endpoint families, expose different system-managed fields, and enforce different validation rules. Integrations must account for an <code class="expression">space.vars.object</code>’s configuration when constructing requests, handling responses, and designing <code class="expression">space.vars.automation</code> <code class="expression">space.vars.workflows</code>.

***

## Schemas

### Object Schema

The <code class="expression">space.vars.object</code> schema defines the structure and behavior of a <code class="expression">space.vars.object</code> in <code class="expression">space.vars.Kizen\_company\_name</code>. It describes the schema-level configuration that governs how <code class="expression">space.vars.entities</code> are created, validated, related, and accessed across the platform.

## The CustomObjectDetail object

```json
{"openapi":"3.0.3","info":{"title":"Kizen API","version":"1.0.0"},"components":{"schemas":{"CustomObjectDetail":{"type":"object","properties":{"id":{"type":"string","format":"uuid","readOnly":true},"object_type":{"$ref":"#/components/schemas/CustomObjectObjectTypeEnum"},"entity_name":{"type":"string","maxLength":200},"object_name":{"type":"string","maxLength":200},"has_commerce_data":{"type":"boolean","default":false},"default_on_activities":{"type":"boolean"},"owner":{"allOf":[{"$ref":"#/components/schemas/SerializerMeta"}],"readOnly":true},"name":{"type":"string"},"description":{"type":"string","nullable":true,"maxLength":500},"ai_description":{"type":"string","readOnly":true,"nullable":true},"is_custom":{"type":"boolean","readOnly":true},"fetch_url":{"type":"string","readOnly":true},"allow_relations":{"type":"boolean","readOnly":true},"meta":{},"related_objects":{"type":"array","items":{"$ref":"#/components/schemas/CustomObjectRelatedObjects"}},"created":{"type":"string","format":"date-time","readOnly":true},"access":{"allOf":[{"$ref":"#/components/schemas/AccessSerpy"}],"readOnly":true},"entity_access":{"type":"boolean","readOnly":true},"rollup_related_leadsources":{"type":"boolean","nullable":true},"quick_filtering_enabled":{"type":"boolean","nullable":true},"record_layouts":{"type":"array","items":{"$ref":"#/components/schemas/EmbeddedRecordLayout"},"readOnly":true},"association_source":{"$ref":"#/components/schemas/CustomObjectAssociationSourceEnum"},"association_source_fields":{"type":"array","items":{"$ref":"#/components/schemas/AssociationSourceField"},"nullable":true},"action_override_create":{"type":"string","nullable":true,"maxLength":512},"field_categories":{"type":"array","items":{"$ref":"#/components/schemas/FieldCategory"},"readOnly":true},"fields":{"type":"array","items":{"$ref":"#/components/schemas/CustomObjectDetailedFieldRead"},"readOnly":true},"pipeline":{"allOf":[{"$ref":"#/components/schemas/CustomObjectPipeline"}],"readOnly":true},"browser_js_actions":{"type":"array","items":{"$ref":"#/components/schemas/BrowserJSAction"},"readOnly":true},"browser_route_scripts":{"type":"array","items":{"$ref":"#/components/schemas/BrowserRouteScript"},"readOnly":true},"custom_actions":{"type":"array","items":{"$ref":"#/components/schemas/CustomActionRead"},"readOnly":true}},"required":["access","ai_description","allow_relations","browser_js_actions","browser_route_scripts","created","custom_actions","default_on_activities","entity_access","entity_name","fetch_url","field_categories","fields","id","is_custom","object_name","owner","pipeline","record_layouts"]},"CustomObjectObjectTypeEnum":{"enum":["pipeline","standard"],"type":"string","description":"* `pipeline` - pipeline\n* `standard` - standard"},"SerializerMeta":{"type":"object","properties":{"picture_url":{"type":"string"},"id":{"type":"string","format":"uuid"},"first_name":{"type":"string"},"last_name":{"type":"string"},"email":{"type":"string","format":"email"},"display_name":{"type":"string"},"account_type":{"type":"string"}},"required":["account_type","display_name","email","first_name","id","last_name","picture_url"]},"CustomObjectRelatedObjects":{"type":"object","properties":{"related_object":{"type":"string","format":"uuid"},"relation_type":{"$ref":"#/components/schemas/CustomObjectRelatedObjectsRelationTypeEnum"},"rollup_timeline":{"type":"boolean","default":false},"rollup_leadsources":{"type":"boolean","default":true},"object_type":{"type":"string","readOnly":true},"object_name":{"type":"string","readOnly":true},"entity_name":{"type":"string","readOnly":true},"field_id":{"type":"string","format":"uuid","nullable":true}},"required":["entity_name","object_name","object_type","related_object","relation_type"]},"CustomObjectRelatedObjectsRelationTypeEnum":{"enum":["one_to_one","primary","additional"],"type":"string","description":"* `one_to_one` - one to one\n* `primary` - primary\n* `additional` - additional"},"AccessSerpy":{"type":"object","properties":{"view":{"type":"boolean"},"edit":{"type":"boolean"},"remove":{"type":"boolean"}},"required":["edit","remove","view"]},"EmbeddedRecordLayout":{"type":"object","properties":{"id":{"type":"string","format":"uuid","readOnly":true},"name":{"type":"string"},"config":{},"tabs":{},"order":{"type":"number","format":"double"}},"required":["id","name"]},"CustomObjectAssociationSourceEnum":{"enum":["direct","related","direct_and_related"],"type":"string","description":"* `direct` - Direct\n* `related` - Related\n* `direct_and_related` - Direct and Related"},"AssociationSourceField":{"type":"object","description":"A serializer that accepts either an 'id' field or an alternate identifier field.\n\nThis serializer class automatically detects which identifier field is being used and\nperforms validation to ensure at least one identifier is provided. It also provides\nutility methods for retrieving objects by their identifiers.\n\nAttributes:\n    IDENTIFIER_FIELD (str): The name of the alternate identifier field. Should be\n        defined in subclasses.\n\nMethods:\n    get_identifier_field(): Determines the alternate identifier field name.\n    validate(attrs): Ensures either 'id' or the alternate identifier is provided.\n    get_identifier_values(data, values_map, queryset): Retrieves objects by their identifiers.","properties":{"id":{"type":"string","format":"uuid","nullable":true,"description":"Required if \"name\" is not provided."},"name":{"type":"string","nullable":true,"description":"Required if \"id\" is not provided."},"related_field":{"type":"string","readOnly":true},"related_object":{"type":"string","readOnly":true}},"required":["related_field","related_object"]},"FieldCategory":{"type":"object","properties":{"id":{"type":"string","format":"uuid"},"name":{"type":"string"},"order":{"type":"integer"}},"required":["id","name","order"]},"CustomObjectDetailedFieldRead":{"type":"object","properties":{"id":{"type":"string","format":"uuid"},"name":{"type":"string"},"category":{"type":"string","format":"uuid"},"display_name":{"type":"string"},"canonical_display_name":{"type":"string"},"is_default":{"type":"boolean"},"field_type":{"$ref":"#/components/schemas/FieldTypeEnum"},"is_required":{"type":"boolean"},"is_read_only":{"type":"boolean"},"is_hidden":{"type":"boolean"},"is_deletable":{"type":"boolean"},"is_hideable":{"type":"boolean"},"is_suppressed":{"type":"boolean"},"include_in_short_form":{"type":"string"},"allows_nulls":{"type":"boolean"},"allows_empty":{"type":"boolean"},"order":{"type":"integer"},"meta":{"type":"object","additionalProperties":{}},"description":{"type":"string"},"description_visibility":{"$ref":"#/components/schemas/DescriptionVisibilityEnum"},"properties":{"type":"object","additionalProperties":{}},"access":{"$ref":"#/components/schemas/AccessSerpy"},"options":{"type":"array","items":{"$ref":"#/components/schemas/FieldOptionSerpy"}},"relation":{"$ref":"#/components/schemas/CustomObjectFieldRelation"},"allow_on_forms":{"type":"boolean"}},"required":["access","allow_on_forms","allows_empty","allows_nulls","canonical_display_name","category","description","description_visibility","display_name","field_type","id","include_in_short_form","is_default","is_deletable","is_hidden","is_hideable","is_read_only","is_required","is_suppressed","meta","name","options","order","properties","relation"]},"FieldTypeEnum":{"enum":["checkbox","checkboxes","choices","date","datetime","decimal","dropdown","dynamictags","email","files","integer","longtext","money","phonenumber","radio","rating","relationship","selector","status","team_selector","text","timezone","wysiwyg","yesnomaybe"],"type":"string","description":"* `checkbox` - Checkbox\n* `checkboxes` - Checkboxes\n* `choices` - Choices\n* `date` - Date\n* `datetime` - Datetime\n* `decimal` - Decimal Number\n* `dropdown` - Dropdown\n* `dynamictags` - Dynamic Tags\n* `email` - Email\n* `files` - Files\n* `integer` - Whole Number\n* `longtext` - Long Text\n* `money` - Money\n* `phonenumber` - Phone Number\n* `radio` - Radio\n* `rating` - Rating\n* `relationship` - Relationship\n* `selector` - Selector\n* `status` - Status\n* `team_selector` - Team Selector\n* `text` - Text\n* `timezone` - Timezone\n* `wysiwyg` - Wysiwyg\n* `yesnomaybe` - Yes / No / Maybe Question"},"DescriptionVisibilityEnum":{"enum":["all","create_only","settings_only"],"type":"string","description":"* `all` - All Labels\n* `create_only` - Only on Create\n* `settings_only` - Only in Settings"},"FieldOptionSerpy":{"type":"object","properties":{"id":{"type":"string","format":"uuid"},"code":{"type":"string"},"name":{"type":"string"},"order":{"type":"integer"},"meta":{"type":"object","additionalProperties":{}},"percentage_chance_to_close":{"type":"integer"},"chance_to_close_percentage":{"type":"integer"},"status":{"$ref":"#/components/schemas/PipelineStageStatusEnum"}},"required":["chance_to_close_percentage","code","id","meta","name","order","percentage_chance_to_close","status"]},"PipelineStageStatusEnum":{"enum":["open","won","lost","disqualified"],"type":"string","description":"* `open` - open\n* `won` - won\n* `lost` - lost\n* `disqualified` - disqualified"},"CustomObjectFieldRelation":{"type":"object","properties":{"related_field":{"type":"string","format":"uuid","readOnly":true},"related_object":{"type":"string","format":"uuid"},"related_category":{"type":"string","format":"uuid","nullable":true},"related_name":{"type":"string","nullable":true},"related_object_name":{"type":"string","readOnly":true},"related_object_object_name":{"type":"string","readOnly":true},"related_entity_name":{"type":"string","readOnly":true},"relation_type":{"$ref":"#/components/schemas/FieldRelationTypeEnum"},"cardinality":{"allOf":[{"$ref":"#/components/schemas/CardinalityEnum"}],"readOnly":true},"fetch_url":{"type":"string","readOnly":true},"rollup_timeline":{"type":"boolean"},"rollup_leadsources":{"type":"boolean"},"inverse_relation_rollup_timeline":{"type":"boolean"},"inverse_relation_rollup_leadsources":{"type":"boolean"},"inverse_relation_suppressed":{"type":"boolean"},"related_object_default_on_activities":{"type":"string","readOnly":true}},"required":["cardinality","fetch_url","related_category","related_entity_name","related_field","related_object","related_object_default_on_activities","related_object_name","related_object_object_name"]},"FieldRelationTypeEnum":{"enum":["one_to_one","primary","additional","primary_for","additional_for"],"type":"string","description":"* `one_to_one` - one to one\n* `primary` - primary\n* `additional` - additional\n* `primary_for` - primary for\n* `additional_for` - additional for"},"CardinalityEnum":{"enum":["one_to_one","many_to_many","many_to_one","one_to_many"],"type":"string","description":"* `one_to_one` - 1 to 1\n* `many_to_many` - Many to Many\n* `many_to_one` - Many to 1\n* `one_to_many` - 1 to Many"},"CustomObjectPipeline":{"type":"object","properties":{"stages":{"type":"array","items":{"$ref":"#/components/schemas/PipelineStage"}},"track_entity_value":{"type":"boolean"},"include_percentage_to_close":{"type":"boolean"},"use_ai_to_update_percentage":{"type":"boolean"}},"required":["stages"]},"PipelineStage":{"type":"object","properties":{"id":{"type":"string","format":"uuid"},"name":{"type":"string"},"status":{"$ref":"#/components/schemas/PipelineStageStatusEnum"},"percentage_chance_to_close":{"type":"integer","maximum":100,"minimum":0,"nullable":true},"order":{"type":"integer","maximum":32767,"minimum":0}},"required":["name","order","status"]},"BrowserJSAction":{"type":"object","properties":{"id":{"type":"string","format":"uuid"},"api_name":{"type":"string"},"name":{"type":"string"},"script":{"type":"string"},"plugin_app":{"$ref":"#/components/schemas/PluginAppLight"}},"required":["api_name","id","name","plugin_app","script"]},"PluginAppLight":{"type":"object","properties":{"id":{"type":"string","format":"uuid"},"api_name":{"type":"string"},"base_config":{}},"required":["api_name","base_config","id"]},"BrowserRouteScript":{"type":"object","properties":{"id":{"type":"string","format":"uuid"},"api_name":{"type":"string"},"name":{"type":"string"},"routes":{},"script":{"type":"string"},"blocking":{"type":"boolean"},"custom_object":{"$ref":"#/components/schemas/_CustomObject"},"plugin_app":{"$ref":"#/components/schemas/PluginAppLight"}},"required":["api_name","blocking","custom_object","id","name","plugin_app","routes","script"]},"_CustomObject":{"type":"object","properties":{"id":{"type":"string","format":"uuid"},"name":{"type":"string"},"object_name":{"type":"string"}},"required":["id","name","object_name"]},"CustomActionRead":{"type":"object","properties":{"id":{"type":"string","format":"uuid"},"name":{"type":"string"},"description":{"type":"string"},"action":{"type":"string"},"automation":{"allOf":[{"$ref":"#/components/schemas/_CustomActionAutomation"}],"nullable":true},"smart_connector":{"allOf":[{"$ref":"#/components/schemas/_CustomActionSmartConnector"}],"nullable":true},"order":{"type":"integer"}},"required":["action","description","id","name","order"]},"_CustomActionAutomation":{"type":"object","properties":{"id":{"type":"string","format":"uuid"},"api_name":{"type":"string"},"name":{"type":"string"}},"required":["api_name","id","name"]},"_CustomActionSmartConnector":{"type":"object","properties":{"id":{"type":"string","format":"uuid"},"name":{"type":"string"}},"required":["id","name"]}}}}
```

## The CustomObjectRead object

```json
{"openapi":"3.0.3","info":{"title":"Kizen API","version":"1.0.0"},"components":{"schemas":{"CustomObjectRead":{"type":"object","properties":{"id":{"type":"string","format":"uuid","readOnly":true},"object_type":{"$ref":"#/components/schemas/CustomObjectObjectTypeEnum"},"entity_name":{"type":"string","maxLength":200},"object_name":{"type":"string","maxLength":200},"has_commerce_data":{"type":"boolean","default":false},"default_on_activities":{"type":"boolean"},"owner":{"allOf":[{"$ref":"#/components/schemas/SerializerMeta"}],"readOnly":true},"name":{"type":"string"},"description":{"type":"string","nullable":true,"maxLength":500},"ai_description":{"type":"string","readOnly":true,"nullable":true},"is_custom":{"type":"boolean","readOnly":true},"fetch_url":{"type":"string","readOnly":true},"allow_relations":{"type":"boolean","readOnly":true},"meta":{},"related_objects":{"type":"array","items":{"$ref":"#/components/schemas/CustomObjectRelatedObjects"}},"number_of_records":{"type":"integer","readOnly":true},"created":{"type":"string","format":"date-time","readOnly":true},"access":{"allOf":[{"$ref":"#/components/schemas/AccessSerpy"}],"readOnly":true},"entity_access":{"type":"boolean","readOnly":true},"rollup_related_leadsources":{"type":"boolean","nullable":true},"quick_filtering_enabled":{"type":"boolean","nullable":true},"record_layouts":{"type":"array","items":{"$ref":"#/components/schemas/EmbeddedRecordLayout"},"readOnly":true},"association_source":{"$ref":"#/components/schemas/CustomObjectAssociationSourceEnum"},"association_source_fields":{"type":"array","items":{"$ref":"#/components/schemas/AssociationSourceField"},"nullable":true},"action_override_create":{"type":"string","nullable":true,"maxLength":512},"track_entity_value":{"type":"boolean"},"include_percentage_to_close":{"type":"boolean"},"use_ai_to_update_percentage":{"type":"boolean"},"ai_confidence_threshold":{"type":"string","format":"decimal","pattern":"^-?\\d{0,1}(?:\\.\\d{0,2})?$"},"pipeline":{"allOf":[{"$ref":"#/components/schemas/CustomObjectPipeline"}],"readOnly":true},"total_pipeline_value":{"type":"number","format":"double","readOnly":true},"total_commerce_value":{"type":"number","format":"double","readOnly":true},"reasons_lost":{"type":"array","items":{"$ref":"#/components/schemas/EmbededFieldOption"}},"reasons_disqualified":{"type":"array","items":{"$ref":"#/components/schemas/EmbededFieldOption"}},"undeletable_fields":{"type":"object","additionalProperties":{},"readOnly":true},"allow_on_forms":{"type":"boolean","nullable":true},"entity_display_name_pattern_text":{"type":"string"},"entity_display_name_pattern_html":{"type":"string"},"entity_search_text_pattern":{"type":"string"},"default_color":{"type":"string","default":"#085BEE"},"default_icon":{"type":"string","default":"bars-light"},"browser_js_actions":{"type":"array","items":{"$ref":"#/components/schemas/BrowserJSAction"},"readOnly":true},"browser_route_scripts":{"type":"array","items":{"$ref":"#/components/schemas/BrowserRouteScript"},"readOnly":true},"custom_actions":{"type":"array","items":{"$ref":"#/components/schemas/CustomActionRead"},"readOnly":true}},"required":["access","ai_description","allow_relations","browser_js_actions","browser_route_scripts","created","custom_actions","default_on_activities","entity_access","entity_name","fetch_url","id","is_custom","number_of_records","object_name","object_type","owner","pipeline","record_layouts","total_commerce_value","total_pipeline_value","undeletable_fields"]},"CustomObjectObjectTypeEnum":{"enum":["pipeline","standard"],"type":"string","description":"* `pipeline` - pipeline\n* `standard` - standard"},"SerializerMeta":{"type":"object","properties":{"picture_url":{"type":"string"},"id":{"type":"string","format":"uuid"},"first_name":{"type":"string"},"last_name":{"type":"string"},"email":{"type":"string","format":"email"},"display_name":{"type":"string"},"account_type":{"type":"string"}},"required":["account_type","display_name","email","first_name","id","last_name","picture_url"]},"CustomObjectRelatedObjects":{"type":"object","properties":{"related_object":{"type":"string","format":"uuid"},"relation_type":{"$ref":"#/components/schemas/CustomObjectRelatedObjectsRelationTypeEnum"},"rollup_timeline":{"type":"boolean","default":false},"rollup_leadsources":{"type":"boolean","default":true},"object_type":{"type":"string","readOnly":true},"object_name":{"type":"string","readOnly":true},"entity_name":{"type":"string","readOnly":true},"field_id":{"type":"string","format":"uuid","nullable":true}},"required":["entity_name","object_name","object_type","related_object","relation_type"]},"CustomObjectRelatedObjectsRelationTypeEnum":{"enum":["one_to_one","primary","additional"],"type":"string","description":"* `one_to_one` - one to one\n* `primary` - primary\n* `additional` - additional"},"AccessSerpy":{"type":"object","properties":{"view":{"type":"boolean"},"edit":{"type":"boolean"},"remove":{"type":"boolean"}},"required":["edit","remove","view"]},"EmbeddedRecordLayout":{"type":"object","properties":{"id":{"type":"string","format":"uuid","readOnly":true},"name":{"type":"string"},"config":{},"tabs":{},"order":{"type":"number","format":"double"}},"required":["id","name"]},"CustomObjectAssociationSourceEnum":{"enum":["direct","related","direct_and_related"],"type":"string","description":"* `direct` - Direct\n* `related` - Related\n* `direct_and_related` - Direct and Related"},"AssociationSourceField":{"type":"object","description":"A serializer that accepts either an 'id' field or an alternate identifier field.\n\nThis serializer class automatically detects which identifier field is being used and\nperforms validation to ensure at least one identifier is provided. It also provides\nutility methods for retrieving objects by their identifiers.\n\nAttributes:\n    IDENTIFIER_FIELD (str): The name of the alternate identifier field. Should be\n        defined in subclasses.\n\nMethods:\n    get_identifier_field(): Determines the alternate identifier field name.\n    validate(attrs): Ensures either 'id' or the alternate identifier is provided.\n    get_identifier_values(data, values_map, queryset): Retrieves objects by their identifiers.","properties":{"id":{"type":"string","format":"uuid","nullable":true,"description":"Required if \"name\" is not provided."},"name":{"type":"string","nullable":true,"description":"Required if \"id\" is not provided."},"related_field":{"type":"string","readOnly":true},"related_object":{"type":"string","readOnly":true}},"required":["related_field","related_object"]},"CustomObjectPipeline":{"type":"object","properties":{"stages":{"type":"array","items":{"$ref":"#/components/schemas/PipelineStage"}},"track_entity_value":{"type":"boolean"},"include_percentage_to_close":{"type":"boolean"},"use_ai_to_update_percentage":{"type":"boolean"}},"required":["stages"]},"PipelineStage":{"type":"object","properties":{"id":{"type":"string","format":"uuid"},"name":{"type":"string"},"status":{"$ref":"#/components/schemas/PipelineStageStatusEnum"},"percentage_chance_to_close":{"type":"integer","maximum":100,"minimum":0,"nullable":true},"order":{"type":"integer","maximum":32767,"minimum":0}},"required":["name","order","status"]},"PipelineStageStatusEnum":{"enum":["open","won","lost","disqualified"],"type":"string","description":"* `open` - open\n* `won` - won\n* `lost` - lost\n* `disqualified` - disqualified"},"EmbededFieldOption":{"type":"object","description":"Used in CustomObjectSerializer where we can create reasons_lost and reasons_disqualified","properties":{"id":{"type":"string","format":"uuid"},"name":{"type":"string"}},"required":["name"]},"BrowserJSAction":{"type":"object","properties":{"id":{"type":"string","format":"uuid"},"api_name":{"type":"string"},"name":{"type":"string"},"script":{"type":"string"},"plugin_app":{"$ref":"#/components/schemas/PluginAppLight"}},"required":["api_name","id","name","plugin_app","script"]},"PluginAppLight":{"type":"object","properties":{"id":{"type":"string","format":"uuid"},"api_name":{"type":"string"},"base_config":{}},"required":["api_name","base_config","id"]},"BrowserRouteScript":{"type":"object","properties":{"id":{"type":"string","format":"uuid"},"api_name":{"type":"string"},"name":{"type":"string"},"routes":{},"script":{"type":"string"},"blocking":{"type":"boolean"},"custom_object":{"$ref":"#/components/schemas/_CustomObject"},"plugin_app":{"$ref":"#/components/schemas/PluginAppLight"}},"required":["api_name","blocking","custom_object","id","name","plugin_app","routes","script"]},"_CustomObject":{"type":"object","properties":{"id":{"type":"string","format":"uuid"},"name":{"type":"string"},"object_name":{"type":"string"}},"required":["id","name","object_name"]},"CustomActionRead":{"type":"object","properties":{"id":{"type":"string","format":"uuid"},"name":{"type":"string"},"description":{"type":"string"},"action":{"type":"string"},"automation":{"allOf":[{"$ref":"#/components/schemas/_CustomActionAutomation"}],"nullable":true},"smart_connector":{"allOf":[{"$ref":"#/components/schemas/_CustomActionSmartConnector"}],"nullable":true},"order":{"type":"integer"}},"required":["action","description","id","name","order"]},"_CustomActionAutomation":{"type":"object","properties":{"id":{"type":"string","format":"uuid"},"api_name":{"type":"string"},"name":{"type":"string"}},"required":["api_name","id","name"]},"_CustomActionSmartConnector":{"type":"object","properties":{"id":{"type":"string","format":"uuid"},"name":{"type":"string"}},"required":["id","name"]}}}}
```

### Record Schema

The <code class="expression">space.vars.entity</code> schema represents an individual data instance that conforms to an <code class="expression">space.vars.object</code>’s schema. It contains the stored field values, system-managed metadata, and references to related <code class="expression">space.vars.entities</code>.

## The EntityRecordAddRequest object

```json
{"openapi":"3.0.3","info":{"title":"Kizen API","version":"1.0.0"},"components":{"schemas":{"EntityRecordAddRequest":{"type":"object","properties":{"fields":{"type":"array","items":{"$ref":"#/components/schemas/FieldRequest"}},"unarchive":{"nullable":true,"oneOf":[{"$ref":"#/components/schemas/UnarchiveEnum"},{"$ref":"#/components/schemas/NullEnum"}]}},"required":["fields"]},"FieldRequest":{"type":"object","properties":{"id":{"type":"string","format":"uuid","nullable":true,"description":"ID of the field, can be used instead of field name."},"name":{"type":"string","nullable":true,"minLength":1,"description":"Name of the field, can be used instead of field ID."},"value":{"nullable":true,"description":"Value to be set, this is required for fields that do not allow multiple values."},"add_values":{"type":"array","items":{},"nullable":true,"description":"Values to be added, applicable only for fields that allow multiple values."},"remove_values":{"type":"array","items":{},"nullable":true,"description":"Values to be removed, applicable only for fields that allow multiple values."}}},"UnarchiveEnum":{"enum":["prompt","unarchive","overwrite"],"type":"string","description":"* `prompt` - prompt\n* `unarchive` - unarchive\n* `overwrite` - overwrite"},"NullEnum":{"enum":[null]}}}}
```

## The EntityRecordDetail object

```json
{"openapi":"3.0.3","info":{"title":"Kizen API","version":"1.0.0"},"components":{"schemas":{"EntityRecordDetail":{"type":"object","properties":{"object_type":{"type":"string"},"num_upcoming_activities":{"type":"integer"},"fields":{"$ref":"#/components/schemas/Fields"},"id":{"type":"string","format":"uuid"},"client_info":{"$ref":"#/components/schemas/ClientInfo"},"access":{"$ref":"#/components/schemas/AccessSerpy"},"num_associated_team_members":{"type":"integer"},"lead_source_types":{"type":"array","items":{"$ref":"#/components/schemas/LeadSourceType"}}},"required":["access","client_info","fields","id","lead_source_types","num_associated_team_members","num_upcoming_activities","object_type"]},"Fields":{"type":"object","properties":{"id":{"$ref":"#/components/schemas/SerializedFieldValueDict"}},"required":["id"]},"SerializedFieldValueDict":{"type":"object","properties":{"id":{"type":"string"},"field_type":{"type":"string"},"display_name":{"type":"string"},"value":{"type":"object","additionalProperties":{}}},"required":["display_name","field_type","id","value"]},"ClientInfo":{"type":"object","properties":{"num_addresses_v2":{"type":"integer"},"display_name":{"type":"string"},"email_on_suppression_list":{"type":"boolean"}},"required":["display_name","email_on_suppression_list","num_addresses_v2"]},"AccessSerpy":{"type":"object","properties":{"view":{"type":"boolean"},"edit":{"type":"boolean"},"remove":{"type":"boolean"}},"required":["edit","remove","view"]},"LeadSourceType":{"type":"object","properties":{"value":{"$ref":"#/components/schemas/ValueEnum"},"label":{"type":"string"}},"required":["label","value"]},"ValueEnum":{"enum":["organic_search","direct_traffic","site_referral","facebook_ads","google_ads","social","paid_social","utm","custom"],"type":"string","description":"* `organic_search` - Organic Search\n* `direct_traffic` - Direct Traffic\n* `site_referral` - Site Referral\n* `facebook_ads` - Facebook Ads\n* `google_ads` - Google Ads\n* `social` - Social\n* `paid_social` - Paid Social\n* `utm` - UTM\n* `custom` - Custom"}}}}
```

## The EntityRecordList object

```json
{"openapi":"3.0.3","info":{"title":"Kizen API","version":"1.0.0"},"components":{"schemas":{"EntityRecordList":{"type":"object","properties":{"object_type":{"type":"string"},"fields":{"$ref":"#/components/schemas/Fields"},"id":{"type":"string","format":"uuid"},"client_info":{"$ref":"#/components/schemas/ClientInfo"},"access":{"$ref":"#/components/schemas/AccessSerpy"}},"required":["access","client_info","fields","id","object_type"]},"Fields":{"type":"object","properties":{"id":{"$ref":"#/components/schemas/SerializedFieldValueDict"}},"required":["id"]},"SerializedFieldValueDict":{"type":"object","properties":{"id":{"type":"string"},"field_type":{"type":"string"},"display_name":{"type":"string"},"value":{"type":"object","additionalProperties":{}}},"required":["display_name","field_type","id","value"]},"ClientInfo":{"type":"object","properties":{"num_addresses_v2":{"type":"integer"},"display_name":{"type":"string"},"email_on_suppression_list":{"type":"boolean"}},"required":["display_name","email_on_suppression_list","num_addresses_v2"]},"AccessSerpy":{"type":"object","properties":{"view":{"type":"boolean"},"edit":{"type":"boolean"},"remove":{"type":"boolean"}},"required":["edit","remove","view"]}}}}
```

## The EntityRecordUpdateRequest object

```json
{"openapi":"3.0.3","info":{"title":"Kizen API","version":"1.0.0"},"components":{"schemas":{"EntityRecordUpdateRequest":{"type":"object","properties":{"fields":{"type":"array","items":{"$ref":"#/components/schemas/FieldRequest"}},"archived_conflict":{"nullable":true,"description":"Updates the identifier of matching archived record to not raise a conflict.\n\n* `overwrite` - overwrite","oneOf":[{"$ref":"#/components/schemas/ArchivedConflictEnum"},{"$ref":"#/components/schemas/NullEnum"}]}},"required":["fields"]},"FieldRequest":{"type":"object","properties":{"id":{"type":"string","format":"uuid","nullable":true,"description":"ID of the field, can be used instead of field name."},"name":{"type":"string","nullable":true,"minLength":1,"description":"Name of the field, can be used instead of field ID."},"value":{"nullable":true,"description":"Value to be set, this is required for fields that do not allow multiple values."},"add_values":{"type":"array","items":{},"nullable":true,"description":"Values to be added, applicable only for fields that allow multiple values."},"remove_values":{"type":"array","items":{},"nullable":true,"description":"Values to be removed, applicable only for fields that allow multiple values."}}},"ArchivedConflictEnum":{"enum":["overwrite"],"type":"string","description":"* `overwrite` - overwrite"},"NullEnum":{"enum":[null]}}}}
```

## The EntityRecordUpsertRequest object

```json
{"openapi":"3.0.3","info":{"title":"Kizen API","version":"1.0.0"},"components":{"schemas":{"EntityRecordUpsertRequest":{"type":"object","properties":{"lookup_value":{"type":"string","minLength":1,"description":"Value to match the entity record (name for custom objects, email for contacts)."},"oncreate_unarchive":{"nullable":true,"description":"Behavior when creating and a matching archived record exists.\n\n* `prompt` - prompt\n* `unarchive` - unarchive\n* `overwrite` - overwrite","oneOf":[{"$ref":"#/components/schemas/OncreateUnarchiveEnum"},{"$ref":"#/components/schemas/NullEnum"}]},"onupdate_archived_conflict":{"nullable":true,"description":"Updates the identifier of matching archived record to not raise a conflict during update.\n\n* `overwrite` - overwrite","oneOf":[{"$ref":"#/components/schemas/OnupdateArchivedConflictEnum"},{"$ref":"#/components/schemas/NullEnum"}]}},"required":["lookup_value"]},"OncreateUnarchiveEnum":{"enum":["prompt","unarchive","overwrite"],"type":"string","description":"* `prompt` - prompt\n* `unarchive` - unarchive\n* `overwrite` - overwrite"},"NullEnum":{"enum":[null]},"OnupdateArchivedConflictEnum":{"enum":["overwrite"],"type":"string","description":"* `overwrite` - overwrite"}}}}
```

## The PatchedEntityRecordUpdateRequest object

```json
{"openapi":"3.0.3","info":{"title":"Kizen API","version":"1.0.0"},"components":{"schemas":{"PatchedEntityRecordUpdateRequest":{"type":"object","properties":{"fields":{"type":"array","items":{"$ref":"#/components/schemas/FieldRequest"}},"archived_conflict":{"nullable":true,"description":"Updates the identifier of matching archived record to not raise a conflict.\n\n* `overwrite` - overwrite","oneOf":[{"$ref":"#/components/schemas/ArchivedConflictEnum"},{"$ref":"#/components/schemas/NullEnum"}]}}},"FieldRequest":{"type":"object","properties":{"id":{"type":"string","format":"uuid","nullable":true,"description":"ID of the field, can be used instead of field name."},"name":{"type":"string","nullable":true,"minLength":1,"description":"Name of the field, can be used instead of field ID."},"value":{"nullable":true,"description":"Value to be set, this is required for fields that do not allow multiple values."},"add_values":{"type":"array","items":{},"nullable":true,"description":"Values to be added, applicable only for fields that allow multiple values."},"remove_values":{"type":"array","items":{},"nullable":true,"description":"Values to be removed, applicable only for fields that allow multiple values."}}},"ArchivedConflictEnum":{"enum":["overwrite"],"type":"string","description":"* `overwrite` - overwrite"},"NullEnum":{"enum":[null]}}}}
```

For more information see, [Records Data Model](/docs/concepts/objects/records/records-data-model).

***

## Additional Information

<details>

<summary>Supported APIs</summary>

#### Supported APIs

<code class="expression">space.vars.objects</code> support APIs for:

* [Retrieving Object Field Options](/docs/concepts/objects/custom-fields/custom-field-apis/retrieve-object-field-options-api)
* [Retrieving Custom Object Details by ID](/docs/concepts/objects/object-apis/retrieve-object-details-by-id-api)
* [Managing your Records](/docs/concepts/objects/records/records-apis/manage-records-by-id-api)

Object schema creation and modification are managed through the UI and are not performed via API.

</details>

<details>

<summary>Error States</summary>

Errors may occur due to:

* Missing required fields
* Invalid field values
* Permission restrictions
* Invalid or missing identifiers

Error responses follow standard API validation patterns

</details>

***

## What’s Next

Next, explore [Object APIs](/docs/concepts/objects/object-apis) to see how this data model is used in real API requests and responses.

<details>

<summary>Related Topics</summary>

* [Object Core Concepts](/docs/concepts/objects/object-core-concepts)
* [Object Relationships](/docs/concepts/objects/object-configuration/object-relationships)
* [Object Workflows](/docs/concepts/objects/object-configuration/object-workflows)
* [Object Permissions](/docs/concepts/objects/object-configuration/object-permissions)
* [Objects APIs](/docs/concepts/objects/object-apis)

</details>


# Object Configuration

Configure Objects in Kizen by managing general settings, workflows, relationships, custom fields, layouts, and permissions to define how data is structured, connected, and displayed.

## Overview

<code class="expression">space.vars.object</code> configuration defines how data is modeled, displayed, connected, and governed across the platform. Each <code class="expression">space.vars.object</code> is configured through a set of focused settings pages, each responsible for a specific aspect of <code class="expression">space.vars.object</code> behavior.

Configuration is modular. Changes in one area (such as fields or relationships) may affect other areas (such as layouts or APIs), but each setting is managed independently.

### Why Object Configuration Matters

<code class="expression">space.vars.object</code> configuration determines how data behaves across the platform. The decisions you make shape how teams work, how reliably data moves through <code class="expression">space.vars.automations</code> and APIs, and how well the system scales as your business grows.

When <code class="expression">space.vars.objects</code> are configured well, they support:

* Consistent, trustworthy data that teams can rely on
* Clear, predictable workflows that reflect real-world processes
* Stable <code class="expression">space.vars.automations</code> and integrations built on durable schemas
* Accurate reporting and analysis based on structured, connected data
* Clear ownership and governed access, reducing risk as teams expand

Poor or rushed configuration has the opposite effect. It leads to fragmented schemas, unclear ownership, brittle <code class="expression">space.vars.automations</code>, and <code class="expression">space.vars.entities</code> that are difficult to search, report on, or maintain. Over time, these issues compound, making changes more expensive and limiting what the platform can support.

Because <code class="expression">space.vars.objects</code> sit at the center of <code class="expression">space.vars.entities</code>, workflows, permissions, and APIs, configuration decisions are foundational. Investing in thoughtful setup early reduces rework later and ensures <code class="expression">space.vars.objects</code> remain usable, extensible, and understandable as your system evolves.

***

## Object Configuration Areas

Use the pages below to configure different aspects of an <code class="expression">space.vars.object</code>.

### General Settings

Define the <code class="expression">space.vars.object</code>’s identity and core behavior, including naming, workflow eligibility, searchability, and platform participation.&#x20;

See [**Object General Settings**](/docs/concepts/objects/object-configuration/object-general-settings).

### Workflows

Control whether the <code class="expression">space.vars.object</code> follows a lifecycle and configure stages, probabilities, and workflow behavior.&#x20;

See [**Object Workflows**](/docs/concepts/objects/object-configuration/object-workflows).

### Relationships

Define how the <code class="expression">space.vars.object</code> connects to other <code class="expression">space.vars.objects</code> and how <code class="expression">space.vars.entities</code> reference each other. Relationships shape data visibility, navigation, and reporting.&#x20;

See [**Object Relationships**](/docs/concepts/objects/object-configuration/object-relationships).

### Custom Fields

Define the <code class="expression">space.vars.object</code>’s data schema by creating and managing fields. Fields control what data can be stored, validated, and exposed through APIs.&#x20;

See [**Object Custom Fields**](/docs/concepts/objects/object-configuration/customize-object-fields).

### Layout Customization

Control how fields and related data are arranged on <code class="expression">space.vars.entity</code> pages and in list views. Layouts affect presentation only and do not change the underlying schema.&#x20;

See [**Object Layout Customization**](/docs/concepts/objects/object-configuration/object-layout-customization).

### Permissions

Control who can view, create, edit, and delete <code class="expression">space.vars.entities</code> for this <code class="expression">space.vars.object</code>. Permissions apply across the UI and APIs.&#x20;

See [**Object Permissions**](/docs/concepts/objects/object-configuration/object-permissions).

***

## Configuration Recommendations

<code class="expression">space.vars.object</code> configuration should be managed through the UI rather than the API. While many settings can be retrieved programmatically, schema design and structural changes (such as fields, relationships, layouts, and permissions) should be configured directly in the application to ensure consistency, validation, and proper system behavior.

Although settings can technically be adjusted independently, the following order is recommended:

1. General Settings
2. Workflows (if applicable)
3. Relationships
4. Custom Fields
5. Layout Customization
6. Permissions

This sequence reflects a logical layering of functionality, as each step builds on foundational decisions made in the previous one.

***

## What’s Next

Select a configuration area above to begin setting up your <code class="expression">space.vars.object</code>, or start with [General Settings](/docs/concepts/objects/object-configuration/object-general-settings) to define the <code class="expression">space.vars.object</code>’s core behavior.

<details>

<summary>Related Topics</summary>

* [Object Core Concepts](/docs/concepts/objects/object-core-concepts)
* [Object Data Model](/docs/concepts/objects/object-data-model)
* [Object APIs](/docs/concepts/objects/object-apis)

</details>


# Object General Settings

Explains how to configure an Object’s General Settings, including naming, workflow behavior, searchability, display options, and platform inclusion.

{% hint style="success" %}
**Audience**: Technical Admins, Developers, Solution Architects

**Purpose**: Explains how to configure an object’s General Settings, including its identity, workflow behavior, display, search, and platform participation.
{% endhint %}

## Overview

General Settings define the core identity, behavior, and visibility of an <code class="expression">space.vars.object</code>. These settings determine how the object is named, displayed, searched, and where it appears across the platform.

Most settings can be updated after creation. Some settings are immutable and should be configured carefully.

During <code class="expression">space.vars.object</code> configuration, General Settings appears as Step 1:

1. <mark style="color:$success;">**General Settings**</mark>
2. Related <code class="expression">space.vars.object</code>s
3. Customize Fields
4. Customize Layout
5. Permissions

<div data-with-frame="true"><figure><img src="/files/Op2kHBvvUTJFutQCbn79" alt="" width="563"><figcaption></figcaption></figure></div>

***

## Object Identity Fields

<code class="expression">space.vars.object</code> identity fields define how the <code class="expression">space.vars.object</code> is labeled in the UI and referenced internally.

<div data-with-frame="true"><figure><img src="/files/IQXoDOsm7KAXkcTP0TO4" alt="" width="563"><figcaption></figcaption></figure></div>

* **Object Name (required):** The plural, user-facing name of the <code class="expression">space.vars.object</code>. This name appears in navigation, list views, and settings. *Example: `Orders`*
* **Entity Name (required):** The singular form of the <code class="expression">space.vars.object</code> name. Used when referring to an individual <code class="expression">space.vars.entity</code> and in system messaging. *Example: `Order`*
* **Object API Name:** The programmatic identifier used in API endpoints and <code class="expression">space.vars.automations</code>. It’s generated from the object name and can be changed via API, but doing so is discouraged because it may break integrations. This value remains consistent across businesses that share the same schema, unlike the object ID, which is unique per business.
* **Object ID:** A system-generated unique identifier for the <code class="expression">space.vars.object</code>. Read-only.

***

## Workflow and Filtering

These settings control whether the <code class="expression">space.vars.object</code> behaves as a static data container or a lifecycle-driven workflow.

<div data-with-frame="true"><figure><img src="/files/XwfuqMBNDcOdkmh5iBeR" alt="" width="563"><figcaption></figcaption></figure></div>

* **Contains Workflow:** Enables stage-based lifecycle behavior for the <code class="expression">space.vars.object</code>. When enabled, the <code class="expression">space.vars.object</code> becomes a workflow (pipeline) object that supports stages, lifecycle tracking, and related system fields. This setting is <mark style="color:$tint;">**immutable**</mark> after object creation, so enable it only for objects that must move through a defined process. For more information see, [Object Workflows](/docs/concepts/objects/object-configuration/object-workflows).
* **Enable Quick Filters:** Allows users to filter <code class="expression">space.vars.entities</code> in list views using predefined filters.
* **Display & Search:** Controls how <code class="expression">space.vars.entities</code> are labeled and discovered across the platform.
* **Display Name Template:** Controls how <code class="expression">space.vars.entities</code> are labeled and displayed throughout the UI.
  * Uses field placeholders (for example, `{{ name }}` or `{{ first_name }} {{ last_name }}`) to dynamically generate <code class="expression">space.vars.entity</code> labels
  * Useful when a single primary field isn’t enough to clearly identify a <code class="expression">space.vars.entity</code>
  * Helps improve clarity in lists, lookups, and relationship fields
  * The Display Name field is not shown by default for most <code class="expression">space.vars.objects</code>, since a standard primary field usually provides sufficient identification

<div data-with-frame="true"><figure><img src="/files/hMC2QgUtnSykoIgt0MnC" alt="" width="563"><figcaption></figcaption></figure></div>

* **Fields to Include in Search:** Specifies which fields are searched when users search for <code class="expression">space.vars.entities</code> of this <code class="expression">space.vars.object</code>. Include fields users are most likely to search by, such as names or identifiers.&#x20;

{% hint style="info" %}
**Note**: Only supported field types (for example, text-based or searchable identifier fields) can be included; non-searchable field types such as files, long-form content, or certain structured fields are excluded from search indexing.
{% endhint %}

<div data-with-frame="true"><figure><img src="/files/iHnkS1JNZe8t3YB39nzX" alt="" width="563"><figcaption></figcaption></figure></div>

***

## Description and Visuals

Description and Visuals define the <code class="expression">space.vars.object</code>’s purpose and establishes its visual identity across the platform to improve recognition and administrative clarity.

* **Object Description:** A short description of the <code class="expression">space.vars.object</code>’s purpose. This appears in settings and helps administrators understand how the object is intended to be used.

<div data-with-frame="true"><figure><img src="/files/O1z7NeyEVynVGrkubTBn" alt="" width="563"><figcaption></figcaption></figure></div>

* **Default Color & Default Icon:** Define the <code class="expression">space.vars.object</code>'s visual identity across the platform. The default color appears in the toolbar and related <code class="expression">space.vars.object</code> blocks (and can be overridden in certain contexts), while the default icon provides a consistent visual marker in navigation and <code class="expression">space.vars.entity</code> views.

<div data-with-frame="true"><figure><img src="/files/hfDg84EQnIzI1PNY7zV4" alt="" width="563"><figcaption></figcaption></figure></div>

***

## Enabling Activities and Tracking Entity Value

Enabling Activities and Tracking Entity Value settings determine where the <code class="expression">space.vars.object</code> appears and which platform features it participates in.

<div data-with-frame="true"><figure><img src="/files/a0I5J7fGVkSdtsOKq6sZ" alt="" width="563"><figcaption></figcaption></figure></div>

* **Enable Activities:** Allows activities (such as tasks or logged actions) to be associated with <code class="expression">space.vars.entities</code> of this object. See [Activities](/docs/concepts/activities).&#x20;
* **Track Entity $ Value:** Enables value tracking for <code class="expression">space.vars.entities</code> of this object, allowing Kizen to calculate totals such as pipeline or commerce value.

***

## What's Next

After configuring your General Setting&#x73;**,** continue to [Object Workflows ](/docs/concepts/objects/object-configuration/object-workflows)to define lifecycle stages (if the object contains a workflow), or proceed to [Related Objects](/docs/concepts/objects/object-configuration/object-relationships) to connect this object to others in your data model.

<details>

<summary>Related Topics</summary>

* [Customize Object Fields](/docs/concepts/objects/object-configuration/customize-object-fields)
* [Object Layout Customization](/docs/concepts/objects/object-configuration/object-layout-customization)
* [Object Permissions](/docs/concepts/objects/object-configuration/object-permissions)

</details>


# Object Workflows

Learn how Object Workflows transform Objects into structured pipelines by enabling stages, lifecycle tracking, and optional probability metrics to manage records through repeatable processes.

{% hint style="success" %}
**Audience:** Administrators, Developers, Solution Architects

**Purpose:** Explains how to convert an <code class="expression">space.vars.object</code> from a static container into a lifecycle-driven workflow or pipeline.
{% endhint %}

## Overview

<code class="expression">space.vars.object</code> Workflows add lifecycle behavior to an <code class="expression">space.vars.object</code> by introducing a structured process. <code class="expression">space.vars.entities</code> move through defined stages that represent process milestones or stage progressions, allowing the platform to track state changes, outcomes, and performance over time.

When enabled, <code class="expression">space.vars.object</code> Workflows is configured in Step 2 of the <code class="expression">space.vars.object</code> Configuration process.

1. General Settings
2. <mark style="color:$success;">**Object Workflows**</mark>
3. Related <code class="expression">space.vars.object</code>s
4. Customize Fields
5. Customize Layout
6. Permissions

This stage-driven model differs from non-workflow <code class="expression">space.vars.objects</code>, which maintain <code class="expression">space.vars.entities</code> without interpreting their progression. Workflow-enabled <code class="expression">space.vars.objects</code> provide operational context, making them ideal for processes that require visibility, forecasting, or structured execution. Enabling workflows also unlocks advanced filtering and reporting capabilities, including metrics such as time in stage, pipeline value over time, and progress toward team goals.

### When to Use Object Workflows

Use workflows when <code class="expression">space.vars.entities</code> must follow a repeatable lifecycle.

Best suited for:

* Sales pipelines
* Customer onboarding
* Project delivery
* Approval processes
* Service workflows
* Operational funnels

Avoid enabling workflows for <code class="expression">space.vars.objects</code> that store reference data or do not require stage progression.

***

## Contains Workflow Toggle

<div data-with-frame="true"><figure><img src="/files/IlbsqnB0Yxg1LEFy1tnN" alt="" width="563"><figcaption></figcaption></figure></div>

The **Contains Workflow** toggle activates the ability to create a pipeline for an <code class="expression">space.vars.object</code>. Once enabled, the object gains stage-based behavior and workflow system fields that support lifecycle tracking that displays in the **Stage Settings** tab.

{% hint style="warning" %}
**Caution:** The **Contains Workflow** setting is immutable after <code class="expression">space.vars.object</code> creation. If workflow behavior needs to be added or removed, the <code class="expression">space.vars.object</code> must be recreated.
{% endhint %}

After a workflow is enabled:

* A **Stage Settings** tab is added to the <code class="expression">space.vars.object</code>
* All <code class="expression">space.vars.entities</code> are required to belong to a stage
* Board View Layout becomes available in the Customize Layout tab
* Outcome tracking fields can be generated

### How Records Move Through a Workflow

<code class="expression">space.vars.entities</code> progress through stages as work advances.

Users can update a <code class="expression">space.vars.entity</code>’s stage by:

* Creating an <code class="expression">space.vars.automation</code> Field Update,
* Selecting a new stage from the Stage field, or
* Dragging the <code class="expression">space.vars.entity</code> between columns in Board view

This ensures the pipeline reflects real-time operational status.

***

## Stage Settings

<div data-with-frame="true"><figure><img src="/files/jG8nDLDzjD9TXdHJymKN" alt="" width="563"><figcaption></figcaption></figure></div>

The **Stage Settings** tab is where the workflow structure is configured. Stages represent the sequential steps a <code class="expression">space.vars.entity</code> moves through from creation to completion, arranged in a defined order that reflects the process and supports accurate tracking, reporting, and workflow analytics.

Examples of Stages include:

* New → Qualified → Proposal → Closed
* Requested → Approved → In Progress → Complete

Each stage is assigned a Stage Status, which determines how the platform interprets the <code class="expression">space.vars.entity</code>’s state.

Statuses include:

* **Open:** Active work
* **Won:** Successfully completed
* **Lost**: Unsuccessfully closed
* **Disqualified**: Removed from the process

Configuring statuses enables more accurate reporting and clearer lifecycle visibility.&#x20;

{% hint style="info" %}
**Note:** At this time, statuses are not editable.
{% endhint %}

#### Outcome Reason Fields

When Lost or Disqualified statuses are added, the platform automatically generates reason fields. These fields help organizations analyze pipeline performance and identify patterns behind unsuccessful outcomes.

### Include % Chance to Close

The **Include % Chance to Close** toggle converts a workflow into a probability-driven pipeline.

When enabled:

* Each stage can be assigned a probability value
* <code class="expression">space.vars.entities</code> inherit the probability of the stage they enter
* Values can be manually overridden when necessary

This capability is commonly used for revenue forecasting, weighted reporting, and performance analysis.

{% hint style="info" %}
**Note:** If a <code class="expression">space.vars.entity</code> moves from a stage with a 25% probability to one with a 75% probability, the <code class="expression">space.vars.entity</code>’s likelihood to close updates automatically unless manually adjusted.
{% endhint %}

#### When to Enable This Setting

Enable probability tracking when forecasting outcomes is important or when pipeline performance influences strategic decisions.

Common examples include:

* **Sales pipelines:** Estimate expected revenue by weighting opportunities based on their likelihood to close.
* **Partnership or business development funnels:** Predict which deals are most likely to finalize.
* **Recruiting pipelines:** Forecast hiring outcomes as candidates move from screening to offer stages.
* **Fundraising pipelines:** Project incoming contributions based on donor commitment levels.

Enable this setting when stages represent increasing commitment or certainty, allowing probability values to reflect realistic progression toward completion.

Leave this setting disabled for workflows where probability does not provide meaningful insight.

Examples include:

* Internal task tracking
* Approval workflows
* Support ticket management
* Project step tracking

In these scenarios, <code class="expression">space.vars.entities</code> are expected to complete regardless of stage progression, making likelihood-to-close metrics unnecessary.

### Use AI to Update Stage % Toggle

The **Use AI to Update Stage %** toggle enables <code class="expression">space.vars.Kizen\_company\_name</code>'s artificial intelligence to automatically calculate and assign the probability of a <code class="expression">space.vars.entity</code> closing based on historical pipeline performance.

When this setting is enabled, the platform overrides manually configured stage percentages and continuously analyzes how <code class="expression">space.vars.entities</code> move through your workflow. Using this data, <code class="expression">space.vars.Kizen\_company\_name</code> adjusts the likelihood-to-close values to better reflect real-world outcomes.

Administrators can also configure how long the system waits to gather sufficient data before applying AI-driven probability updates, helping ensure predictions are based on a confident data set.

#### How It Differs From Manual Probability

* **Manual stage %:** Values are static and defined by administrators
* **AI-driven stage %:** Values are dynamically generated using pipeline history and team performance patterns

This allows probability metrics to evolve as your organization’s sales or operational behavior changes.

#### When to Enable This Setting

Enable AI-driven probability when you want stage likelihoods to automatically reflect actual pipeline performance rather than relying on manually assigned percentages.

Common examples include:

* **Mature sales pipelines:** Improve forecast accuracy by using historical win rates to calculate stage probabilities.
* **High-volume recruiting funnels:** Identify conversion patterns as candidates progress through interview stages.
* **Established revenue workflows:** Generate data-driven projections based on consistent deal progression.
* **Organizations moving away from manual forecasting:** Reduce administrative effort and limit human bias in probability estimates.

Enable this setting when your workflow generates consistent historical data and follows repeatable progression patterns.

Leave this setting disabled for workflows where AI may lack sufficient data or where process behavior changes frequently.

Examples include:

* Newly created pipelines with limited historical <code class="expression">space.vars.entities</code>
* Experimental or evolving business processes
* Low-volume workflows
* Short-term initiatives or pilot programs

In these scenarios, manually assigned percentages typically provide more predictable results until enough data exists for AI to model progression accurately.

***

## Board View Layout

<div data-with-frame="true"><figure><img src="/files/B559bkvVa5rDRq8WtKcw" alt="" width="563"><figcaption></figcaption></figure></div>

Workflow-enabled <code class="expression">space.vars.objects</code> support a visual board layout organized by stage.

Board view helps teams:

* Understand workload distribution
* Identify stalled records
* Monitor pipeline health
* Prioritize work

For teams managing high <code class="expression">space.vars.entity</code> volumes, this visualization improves speed and decision-making. For more information on customizing layouts, see [Object Layout Customization](/docs/concepts/objects/object-configuration/object-layout-customization).

***

## Analytics

Workflow-enabled objects surface key operational metrics directly within Board View, providing immediate visibility into workflow performance.

Available metrics may include:

* <code class="expression">space.vars.entity</code> counts to understand stage volume
* Total pipeline value to assess potential outcomes
* Time in stage to identify delays or process bottlenecks

Workflow-enabled <code class="expression">space.vars.objects</code> also support advanced filtering and reporting, enabling teams to evaluate trends such as pipeline value over time and progress toward team goals.

These insights help organizations monitor execution, optimize processes, and make more informed operational decisions.

***

## What’s Next

Now that you understand how workflows structure an <code class="expression">space.vars.object</code>’s lifecycle, you can learn more about any of the following topics below:

<details>

<summary>Related Topics</summary>

* [Object Core Concepts](/docs/concepts/objects/object-core-concepts)
* [Object Data Model](/docs/concepts/objects/object-data-model)
* [Object Relationships](/docs/concepts/objects/object-configuration/object-relationships)
* [Object Layout Customization](/docs/concepts/objects/object-configuration/object-layout-customization)
* [Object Permissions](/docs/concepts/objects/object-configuration/object-permissions)

</details>


# Object Relationships

Learn how Kizen object relationships connect records, control access, share timeline activity, and structure data for better workflows and reporting.

{% hint style="success" %}
**Audience:** Admins, Developers, Solution Architects

**Purpose:** Explains how <code class="expression">space.vars.object</code> relationships work in <code class="expression">space.vars.Kizen\_company\_name</code> and helps admins and solution architects design connected data models that improve usability, visibility, and access control.
{% endhint %}

## Overview

<code class="expression">space.vars.object</code> Relationships let you connect records across <code class="expression">space.vars.objects</code> so users can navigate related data, share context (such as timeline activity), and control access through team associations. In <code class="expression">space.vars.Kizen\_company\_name</code>, relationships are configured at the <code class="expression">space.vars.object</code> level through <code class="expression">space.vars.object</code> Settings and are represented as relationship fields on <code class="expression">space.vars.entities</code>.

During <code class="expression">space.vars.object</code> configuration, Related <code class="expression">space.vars.objects</code> appears as Step 2. If Workflows are enabled, it becomes Step 3.

1. General Settings
2. <mark style="color:$success;">**Related Objects**</mark>
3. Customize Fields
4. Customize Layout
5. Permissions

***

## What's an Object Relationship

An <code class="expression">space.vars.object</code> relationship defines how <code class="expression">space.vars.entities</code> connect to one another across different <code class="expression">space.vars.objects</code> or on the same <code class="expression">space.vars.object</code> depending on configuration. Relationships make your data navigable, meaningful, and usable in real workflows rather than isolated lists of <code class="expression">space.vars.entities</code>.

When you create a relationship, <code class="expression">space.vars.Kizen\_company\_name</code> adds a relationship field to each <code class="expression">space.vars.object</code> so users can link related <code class="expression">space.vars.entities</code> together. For example, a Location can be linked to a Company, a Deal can be linked to a primary Contact, or an Asset can be linked to a Location.

By default, relationships are created in both directions. This means each side gets its own field (for example, *Related Company* on Locations and *Company Locations* on Companies), allowing users to move naturally between related <code class="expression">space.vars.entities</code>. You can choose to hide the reverse field if it is not useful for your use case.

***

## Team Associations

Team Associations determine how access to <code class="expression">space.vars.entities</code> is granted when relationships exist between <code class="expression">space.vars.objects</code>. In other words, this setting controls whether users can see and work with a <code class="expression">space.vars.entity</code> because they are directly involved with it, because they are involved with a related <code class="expression">space.vars.entity</code>, or both. Team Associations are configured using the **Where does this object get its team associations?** selector.

If this setting is misconfigured, users may run into situations where they can create <code class="expression">space.vars.entities</code> but cannot see or access them later. Taking the time to choose the right option here helps prevent confusion and reduces the need for manual permission management.

{% hint style="warning" %}
**Caution:** Misconfiguration in this section is often a cause of <code class="expression">space.vars.object</code> visibility issues. If you are unable to see an <code class="expression">space.vars.object</code> or its <code class="expression">space.vars.entities</code>, please ensure this configuration is correct.
{% endhint %}

### Direct

Access is based only on a user’s direct connection to the <code class="expression">space.vars.entity</code>. For example, a user can access the <code class="expression">space.vars.entity</code> if they:

* Own the <code class="expression">space.vars.entity</code>
* Are assigned to the <code class="expression">space.vars.object</code> or <code class="expression">space.vars.entity</code>
* Are explicitly added to a Team Association for the <code class="expression">space.vars.object</code> or <code class="expression">space.vars.entity</code>&#x20;

Use this when the <code class="expression">space.vars.object</code> should stand on its own and should not inherit access from other <code class="expression">space.vars.objects</code>. This is the most restrictive but safest option.

### Related

Access is inherited from related <code class="expression">space.vars.entities</code>. For example, if a user has access to a Location, they automatically gain access to all related Assets, even if they are not directly assigned to each Asset.

Use this option when the <code class="expression">space.vars.object</code> behaves like a “child” <code class="expression">space.vars.object</code> and should consistently follow the access rules of its parent.

{% hint style="warning" %}
**Caution:** Broad relationships can introduce unintended access. If users are granted access to a highly shared parent <code class="expression">space.vars.entity</code>, they may automatically gain access to many related <code class="expression">space.vars.entities</code>. For example, if all Assets are linked to a shared Location like “Headquarters,” giving a user access to that Location would also grant access to every Asset stored there.
{% endhint %}

### Direct and Related

Access can come from either source. Users can access the <code class="expression">space.vars.entity</code> if they are directly associated with it **or** if they are associated with a related <code class="expression">space.vars.entity</code>.

Use this when you want maximum flexibility and want users to be able to work naturally across related data without constantly managing assignments. This is the most permissive option and may require more governance for larger teams.

***

## Primary vs Additional Relationships

<code class="expression">space.vars.Kizen\_company\_name</code> provides two ways to relate <code class="expression">space.vars.entities</code>, based on whether users need to select one related <code class="expression">space.vars.entity</code> or multiple related <code class="expression">space.vars.entities</code>.

### Primary Relationships

Use a Primary relationship when each <code class="expression">space.vars.entity</code> should be connected to only one main related <code class="expression">space.vars.entity</code>.

Best for:

* A deal with one primary company
* A ticket with one requester
* A location with one owning company

Each <code class="expression">space.vars.entity</code> gets a single-select field, so users can choose only one related <code class="expression">space.vars.entity</code>. This improves clarity and consistency across the platform. By enforcing a single primary relationship, reporting, automation, and filtering behave predictably because there is always one authoritative related <code class="expression">space.vars.entity</code> rather than multiple competing values.

### Additional Relationships

Use an Additional relationship when each <code class="expression">space.vars.entity</code> may need to be connected to multiple related <code class="expression">space.vars.entities</code>.

Best for:

* A deal with multiple stakeholders
* A project with several contributors
* A location with many assets

Each <code class="expression">space.vars.entity</code> gets a multi-select field, allowing users to link several related <code class="expression">space.vars.entities</code>.

### When To Use Both

Many real-world processes need both a clear “main” relationship and supporting relationships. In these cases, use both types together.

Example: Deals and Contacts

* Primary relationship: *Primary Contact* (single-select)
* Additional relationship: *Additional Contacts* (multi-select)

This keeps the most important relationship clear, while still allowing flexibility.

***

## Relationship Types

When you create a relationship between two <code class="expression">space.vars.objects</code>, <code class="expression">space.vars.Kizen\_company\_name</code> asks you to choose a relationship type. This setting simply describes how many <code class="expression">space.vars.entities</code> can be connected on each side of the relationship.

You will see options like:

* One-to-One
* One-to-Many
* Many-to-One
* Many-to-Many (through Additional relationships)

Rather than thinking in database theory, it helps to read the setting like this: “From the <code class="expression">space.vars.entity</code> I’m editing, how many of the other related <code class="expression">space.vars.entities</code> should I be able to connect?”

<details>

<summary>Examples</summary>

#### Example 1: Locations and Companies

If you configure: **Locations → Companies = Many-to-One**

That means:

* A single Location can be connected to one Company
* A Company can be connected to many Locations

In the UI, this typically results in:

* A single-select field on Location (for Company)
* A list of related Locations on the Company record

#### Example 2: Locations and IT Assets

If you configure: **Locations → IT Assets = One-to-Many**

That means:

* One Location can be connected to many IT Assets
* Each IT Asset links back to one Location

In the UI, this typically results in:

* A multi-select or related list of Assets on the Location
* A single Location field on each Asset

</details>

With <code class="expression">space.vars.object</code> relationships, you are not choosing a technical structure. You are choosing how users will connect <code class="expression">space.vars.entities</code> in the interface:

* Choose **“one”** when users should only pick one related <code class="expression">space.vars.entity</code>
* Choose **“many”** when users should be able to pick multiple related <code class="expression">space.vars.entities</code>

***

## Relationship Name vs Reverse Relationship Name

When you create a relationship, <code class="expression">space.vars.Kizen\_company\_name</code> asks you to name the fields that users will see on both sides of the connection.

* **Relationship Name**: label for the field that appears on the <code class="expression">space.vars.object</code> you are currently editing. This is the field users will use to link a <code class="expression">space.vars.entity</code> to another <code class="expression">space.vars.entity</code>. For example, on a Location <code class="expression">space.vars.entity</code>, this might be labeled **Related Company**.
* **Reverse Relationship Name**: label for the field that appears on the related <code class="expression">space.vars.object</code>. This allows users to see and navigate back to related <code class="expression">space.vars.entities</code>. For example, on a Company record, this might appear as **Company Locations**.

Choosing clear, natural names here matters. These labels appear throughout the interface, including on <code class="expression">space.vars.entity</code> detail pages and when users search for and select related <code class="expression">space.vars.entities</code>, so they should match the language your team already uses.

***

## Sharing & Options

Each relationship includes options that control whether certain information appears across related <code class="expression">space.vars.entities</code>. These settings help you decide how much context users should see when moving between <code class="expression">space.vars.entities</code>.

### Timeline Sharing

Timeline sharing determines whether activity from one <code class="expression">space.vars.entity</code> appears on another <code class="expression">space.vars.entity</code>’s Timeline.

You can control this in two directions:

* **Share Timeline To Related:** Activity from this <code class="expression">space.vars.entity</code> appears on the related <code class="expression">space.vars.entity</code>s Timeline.
* **Share Timeline From Related:** Activity from the related <code class="expression">space.vars.entity</code> appears on this <code class="expression">space.vars.entity</code>’s Timeline.

Enable timeline sharing when you want users to be able to see meaningful activity without having to jump between related <code class="expression">space.vars.entities</code>. For example, it can be helpful to surface deal activity directly on a Company record, or to allow a Project to reflect what is happening across its related Tasks.

You may want to leave Timeline sharing turned off when it begins to create unnecessary noise. This often occurs when a <code class="expression">space.vars.entity</code> is related to many other <code class="expression">space.vars.entities</code>, each generating frequent updates, which can make the Timeline harder to scan and use effectively. As an alternative to disabling Timeline sharing entirely, Object Type filters can be used to temporarily hide updates from specific related <code class="expression">space.vars.objects</code> while preserving visibility into others.

### Lead Source Sharing

Lead Source sharing controls whether lead source information passes between related <code class="expression">space.vars.entities</code>.

You can enable this in either direction:

* **Share Lead Sources To Related:** Lead source values on this <code class="expression">space.vars.entity</code> are applied to the related <code class="expression">space.vars.entity</code>.
* **Share Lead Sources From Related:** Lead source values from the related <code class="expression">space.vars.entity</code> are applied to this <code class="expression">space.vars.entity</code>.

Enable lead source sharing when you want attribution to stay consistent across related <code class="expression">space.vars.entities</code>. For example, if a Contact, Deal, and Company are all part of the same customer journey, sharing the lead source ensures they each reflect the same original origin without requiring users to manually keep those fields in sync.

### Suppress Related Field

**Suppress Related Field?** hides the relationship field on the related <code class="expression">space.vars.object</code> and prevents updates from appearing in the Timeline.&#x20;

{% hint style="danger" %}
**Warning:** Suppression is **not reversible**.
{% endhint %}

Use this when:

* The reverse relationship would confuse users (example: reference data like States).
* You do not want users navigating “backwards” from the related <code class="expression">space.vars.object</code>.
* You want to reduce clutter in layouts and timelines.

***

## What Gets Created When You Add A Relationship

When you save a relationship between two <code class="expression">space.vars.objects</code>, <code class="expression">space.vars.Kizen\_company\_name</code> automatically sets up the fields users need to link <code class="expression">space.vars.entities</code> together. You do not need to manually create anything else.

First, <code class="expression">space.vars.Kizen\_company\_name</code> adds a relationship field to the <code class="expression">space.vars.object</code> you are editing, using the **Relationship Nam**e you provided. This is the field users will use to connect <code class="expression">space.vars.entities</code> (for example, selecting a Company on a Location <code class="expression">space.vars.entity</code>).

At the same time, <code class="expression">space.vars.Kizen\_company\_name</code> creates a corresponding field on the other <code class="expression">space.vars.object</code> using the **Reverse Relationship Name**. This allows users to see and navigate the relationship from the other side as well (for example, viewing all related Locations on a Company <code class="expression">space.vars.entity</code>).

The type of field users see depends on how the relationship was configured:

* If the relationship allows only one related <code class="expression">space.vars.entity</code>, the field appears as a **single-select**.
* If the relationship allows multiple related <code class="expression">space.vars.entities</code>, the field appears as a **multi-select**.

Once the relationship is created, both <code class="expression">space.vars.objects</code> immediately gain new fields that make it easy to connect and navigate related <code class="expression">space.vars.entities</code>.

***

## Additional Information

<details>

<summary>Best Practices for Relationship Design</summary>

### Best Practices for Relationship Design

#### 1. Start with the user workflow, not the database terms

Ask:

* “On this <code class="expression">space.vars.entity</code>, do users need to pick one related <code class="expression">space.vars.entity</code> or many?”
* “Which direction will users navigate most often?”
* “Should timeline activity roll up, roll down, or stay isolated?”

#### 2. Use Primary for the “main” link, Additional for “others”

This matches <code class="expression">space.vars.Kizen\_company\_name</code>’s guidance for common CRM patterns (Company ↔ Contacts, Deal ↔ Contacts).

#### 3. Be intentional about timeline sharing

* Turn it on when you want “context at a glance.”
* Keep it off when it creates noise, especially when many child <code class="expression">space.vars.entities</code> will generate frequent updates.

#### 4. Use Suppress Related Field sparingly

Because it is not reversible, treat it like a structural decision, not a cosmetic one.

</details>

<details>

<summary>Common Mistakes to Avoid</summary>

### Common Mistakes to Avoid

**Can’t find Records you just created?**\
Check **Team Associations**. Try **Direct and Related**.

**The relationship feels backwards?**\
You likely picked the wrong direction. Recheck which side should allow **one** vs **many**.

**Timelines look noisy?**\
Turn off timeline sharing from high-volume child <code class="expression">space.vars.entities</code>.

**Labels feel confusing?**\
Rename fields to match real language (e.g., *Primary Company*, not *Related Record*).

**Thinking about suppressing the reverse field?**\
Only do this if you are certain users will never need to navigate from the other side.

</details>

***

## What's Next

Continue to the [Object Data Model ](/docs/concepts/objects/object-data-model)topic to see how relationships fit into the overall structure of your data.

You can also revisit [Object Core Concepts](/docs/concepts/objects/object-core-concepts) for foundational terminology or review the [Records](/docs/concepts/objects/records) topic to understand how users create and work with data in the platform.

<details>

<summary>Related Topics</summary>

* [Object Core Concepts](/docs/concepts/objects/object-core-concepts)
* [Object Data Model](/docs/concepts/objects/object-data-model)
* [Object Layout Customization](/docs/concepts/objects/object-configuration/object-layout-customization)
* [Object Permissions](/docs/concepts/objects/object-configuration/object-permissions)
* [Object APIs](/docs/concepts/objects/object-apis)

</details>


# Customize Object Fields

Define and manage Object fields in Kizen, including field categories, field types, validation rules, and metadata, to control how data is stored, organized, and exposed.

{% hint style="success" %}
**Audience:** Admins, Developers, Solution Architects

**Purpose:** Explains how to define and manage custom fields for an <code class="expression">space.vars.object</code>, including field categories, field types, and metadata, to control how data is stored, validated, and exposed across the platform.
{% endhint %}

## Overview

Custom <code class="expression">space.vars.object</code> Fields define the <code class="expression">space.vars.object</code>’s data schema by specifying what information can be stored on each <code class="expression">space.vars.entity</code> and how that information is organized. Fields are grouped into categories to improve clarity and support layout organization.

During <code class="expression">space.vars.object</code> configuration, Customize Fields appears as Step 3. If Workflows are enabled, it becomes Step 4.

1. General Settings
2. Related <code class="expression">space.vars.objects</code>
3. <mark style="color:$tint;">**Customize Fields**</mark>
4. Customize Layout
5. Permissions

To learn more about custom field types, see [Custom Fields](/docs/concepts/objects/custom-fields).

***

## Field Categories

Categories act as logical groupings for fields and are used to structure layouts and <code class="expression">space.vars.entity</code> views.

* Categories can be reordered
* Categories can be renamed or deleted
* Fields can be moved between categories

Use categories to group related data, such as order details, customer information, or fulfillment data. You can select **Add New Category** which creates a new field category.

<div data-with-frame="true"><figure><img src="/files/oYO2GhXmQdWPDxBEwza6" alt="" width="563"><figcaption></figcaption></figure></div>

***

## Fields

Fields define individual data points stored on each <code class="expression">space.vars.entity</code>.

Fields can be:

* Reordered within a category
* Moved between categories
* Edited to update labels or behavior
* Deleted (if not system-required)

Fields marked as required must contain a value before a <code class="expression">space.vars.entity</code> can be created. For workflow <code class="expression">space.vars.objects</code>, required fields may also be enforced before a <code class="expression">space.vars.entity</code> can move to another stage.

System-required fields cannot be removed.

***

## Export Field Metadata

Exports the <code class="expression">space.vars.object</code>’s field configuration, including field names, IDs, types, and options.

Use this export when:

* Building API integrations
* Validating data mappings
* Auditing <code class="expression">space.vars.object</code> schemas across environments

If selected, you'll receive an email with an option to download a custom field csv file.

***

## Add New Field

Use **Add New Field** to create a new field on the <code class="expression">space.vars.object</code> and define how data is captured, stored, and validated.

Adding a field is a two-step process:

1. Configure field settings
2. Choose a field type

Learn more about our [Custom Fields](/docs/concepts/objects/custom-fields).

{% stepper %}
{% step %}

### Field Settings

Field Settings define the field’s identity, organization, and descriptive metadata.

<div data-with-frame="true"><figure><img src="/files/kRqly1KtJxcczpkoagEU" alt="" width="563"><figcaption></figcaption></figure></div>

* **Field Name:** The user-facing label for the field. Appears on <code class="expression">space.vars.entity</code>s, layouts, and filters.
* **Category:** Determines which category the field belongs to.
* **Description:** Optional helper text explaining the purpose of the field.
* **Description Visibility:** Controls where the field description is displayed.

<div data-with-frame="true"><figure><img src="/files/eW7TJbG85Lcvrj1Y3xVB" alt="" width="370"><figcaption></figcaption></figure></div>
{% endstep %}

{% step %}

### Choose Field Type

Field type determines how data is stored, validated, and displayed. Once created, a field’s type **cannot be changed**.

Choose the field type that best matches how the data will be used in <code class="expression">space.vars.entity</code>s, workflows, and integrations.

<div data-with-frame="true"><figure><img src="/files/VLcEenUD2HoXpUxKnJg7" alt="" width="563"><figcaption></figcaption></figure></div>
{% endstep %}

{% step %}

### Saving the Field

Select **Save** to create the field and add it to the selected category. Select **Cancel** to discard changes.

Once saved:

* The field is available on <code class="expression">space.vars.entity</code>s
* The field can be added to layouts
* The field becomes part of the <code class="expression">space.vars.object</code>’s API schema
  {% endstep %}
  {% endstepper %}

***

## What’s Next

After configuring fields, continue to [Customize Layout](/docs/concepts/objects/object-configuration/object-layout-customization) to control field placement on <code class="expression">space.vars.entity</code> pages. You can also learn about [Fields](/docs/concepts/objects/custom-fields), or you can proceed to [Permissions](/docs/concepts/objects/object-configuration/object-permissions) to define who can view or edit <code class="expression">space.vars.entity</code>s and fields.

<details>

<summary>Related Topics</summary>

* [Object General Settings](/docs/concepts/objects/object-configuration/object-general-settings)
* [Object Workflows](/docs/concepts/objects/object-configuration/object-workflows)
* [Object Relationships](/docs/concepts/objects/object-configuration/object-relationships)

</details>


# Object Layout Customization

Learn how to use Kizen APIs and Webhooks to discover Objects, access Record data, and build scalable integrations using request-driven and event-driven architectures.

{% hint style="success" %}
**Audience**: Technical Admins, Developers, Solution Architects

**Purpose**: Explains how to customize <code class="expression">space.vars.entity</code> layouts, list views, and actions for an <code class="expression">space.vars.object</code>, and clarifies what layout configuration does and does not affect.
{% endhint %}

## Overview

Customize Layout focuses on the presentation and interactions you have with your <code class="expression">space.vars.object</code> rather than the data structure. It does not change fields, relationships, validation rules, or stored data.

During <code class="expression">space.vars.object</code> configuration, Customize Layout appears as Step 4. If Workflows are enabled, it becomes Step 5.

1. General Settings
2. Related <code class="expression">space.vars.object</code>s
3. Customize Fields
4. <mark style="color:$success;">**Customize Layout**</mark>
5. Permissions

The Customize Layout step lets you control how <code class="expression">space.vars.entities</code> for an <code class="expression">space.vars.object</code> are displayed and interacted with in <code class="expression">space.vars.Kizen\_company\_name</code>. This includes how individual <code class="expression">space.vars.entities</code> are laid out, which fields appear in <code class="expression">space.vars.entity</code> lists by default, and which actions users can take on a <code class="expression">space.vars.entity</code>.&#x20;

Use Customize Layout after fields and relationships are defined, but before setting permissions.

***

## What You Can Customize

Within **Customize Layout**, you can configure three areas:

* **Record Layout:** How individual <code class="expression">space.vars.entities</code> are displayed in <code class="expression">space.vars.Kizen\_company\_name</code>
* **Default Columns:** Which fields appear in <code class="expression">space.vars.entity</code> list views by default
* **Custom Actions:** Actions users can take directly from a <code class="expression">space.vars.entity</code>

Each area controls a different part of the <code class="expression">space.vars.entity</code> experience.

<div data-with-frame="true"><figure><img src="/files/gx6jQbtwO0kYadD8qwmp" alt="" width="563"><figcaption></figcaption></figure></div>

### Record Layout Tab

<code class="expression">space.vars.entity</code> layouts control how a single <code class="expression">space.vars.entity</code> appears when a user opens it. Layouts determine which components appear on the <code class="expression">space.vars.entity</code> page, how they are arranged, and who can see a given layout.

A <code class="expression">space.vars.entity</code> layout includes:

* A layout name
* An active or inactive state&#x20;
* Optional display settings (such as whether to show the <code class="expression">space.vars.automations</code> tab)
* A configurable layout canvas made up of rows, columns, and components
* Layout-specific sharing settings

Changes to a <code class="expression">space.vars.entity</code> layout affect how <code class="expression">space.vars.entity</code>s are displayed, not what data is stored.

<div data-with-frame="true"><figure><img src="/files/214UZ8KEuJc9DK1zthde" alt="" width="563"><figcaption></figcaption></figure></div>

#### When to Use Record Layouts

Use <code class="expression">space.vars.entity</code> layouts when:

* <code class="expression">space.vars.entities</code> require a clear visual hierarchy
* Different users need different <code class="expression">space.vars.entity</code> experiences
* Actions and timelines should be emphasized or hidden
* <code class="expression">space.vars.objects</code> contain many fields and components

#### How Record Layouts Work

Each <code class="expression">space.vars.object</code> can have one or more <code class="expression">space.vars.entity</code> layouts. From the <code class="expression">space.vars.entity</code> Layout tab, select an existing layout (such as *Standard View*) to modify or create a new one.

Each <code class="expression">space.vars.entity</code> layout defines the visual structure of a <code class="expression">space.vars.entity</code> page, including which components appear, how they’re arranged, and who can see the layout. Layouts can be active or inactive and may include optional display settings, such as whether to show the <code class="expression">space.vars.automation</code>s tab.

<div data-with-frame="true"><figure><img src="/files/GFckDE91jCzVdiJdPNKN" alt="" width="563"><figcaption></figcaption></figure></div>

#### Record Layout Structure and Components

Layouts are built using a row-and-column grid.

* Rows define horizontal sections of the page
* Each row can contain one or more columns
* Columns hold one or more layout components

You can add new rows and add components within each column to control the structure of the <code class="expression">space.vars.entity</code> page.

Layout components define what information and functionality appears on a <code class="expression">space.vars.entity</code> page. Components are added to a layout within rows and columns. When adding a component, you choose a component type and assign an internal block name for reference.

Components can be reordered within a column to control vertical placement on the <code class="expression">space.vars.entity</code> page.

Available layout components include:

* **Field categories:** Displays selected fields from the <code class="expression">space.vars.object</code>
* **Team and Activities:** Displays assigned team members and activity-related information
* **Action Block:** Displays available actions for the <code class="expression">space.vars.entity</code> (email, notes, <code class="expression">space.vars.automations</code>, and activities)
* **Lead Sources:** Displays lead source information (when applicable)
* **Timeline:** Displays activity and timeline history for the <code class="expression">space.vars.entity</code>
* **Related Object Fields:** Displays selected fields from a related <code class="expression">space.vars.entity</code> on the current record to provide additional context.
* **Custom Content (Builder):** Lets users create and embed flexible, custom UI elements—such as rich text, images, buttons, and layout sections—directly within a <code class="expression">space.vars.entity</code> layout to support guidance, workflows, or contextual information.

<div data-with-frame="true"><figure><img src="/files/iDaBDspFXvCPs4T8zHBp" alt="" width="563"><figcaption></figcaption></figure></div>

#### Record Preview

The <code class="expression">space.vars.entity</code> Preview panel shows a live preview of the selected layout.

* Previews update as you modify the layout
* The preview helps validate structure and component placement before saving

<div data-with-frame="true"><figure><img src="/files/5KbvIrHU5c2hK9Vwofcw" alt="" width="563"><figcaption></figcaption></figure></div>

#### Visibility and Sharing

<code class="expression">space.vars.entity</code> layouts have their own sharing settings that control who can view <code class="expression">space.vars.entity</code>s using a given layout.

<div data-with-frame="true"><figure><img src="/files/cCZYazMfWcVi6aeWxtgg" alt="" width="563"><figcaption></figcaption></figure></div>

You can configure layout visibility for:

* **All Team Members**
  * None
  * View
* **Specific Roles (View)**
* **Specific Team Members (View)**

Layout sharing settings affect which users can see <code class="expression">space.vars.entities</code> using that layout. They do not grant edit or admin permissions.

#### When to Use Record Layouts

Use <code class="expression">space.vars.entity</code> layouts when:

* <code class="expression">space.vars.entities</code> require a clear visual hierarchy
* Different users need different <code class="expression">space.vars.entity</code> experiences
* Actions and timelines should be emphasized or hidden
* <code class="expression">space.vars.objects</code> contain many fields and components

### Default Columns Tab

Default columns control which fields appear in the <code class="expression">space.vars.object</code>’s <code class="expression">space.vars.entity</code> list view. These columns define what users see when browsing <code class="expression">space.vars.entities</code> without opening them.&#x20;

{% hint style="info" %}
**Note**: Default columns apply to all users unless it's customized by the user.
{% endhint %}

<div data-with-frame="true"><figure><img src="/files/6N3YhbFqutKuPAasCBdD" alt="" width="563"><figcaption></figcaption></figure></div>

#### How Default Columns Work

From the **Default Columns** tab, you configure the table columns shown for the <code class="expression">space.vars.object</code> by default.

The page is divided into three main areas:

* **Column Preview:** shows a live preview of the <code class="expression">space.vars.entity</code> list table

<div data-with-frame="true"><figure><img src="/files/0YqMFlmriFEHKOjvMDkN" alt="" width="563"><figcaption></figcaption></figure></div>

* **Available Columns (Drag to Add):** fields that can be added as columns to the <code class="expression">space.vars.entity</code> list table. Fields in **Available Columns** are grouped by category (for example, *Ingredient Info* or *Stock & Cost*) and can be searched using the Find Options field.

<div data-with-frame="true"><figure><img src="/files/FMyxU4svIB29I85rILgT" alt="" width="563"><figcaption></figcaption></figure></div>

* **Active Table Columns:** fields currently shown in the table (this will match the preview)

<div data-with-frame="true"><figure><img src="/files/wGH6b0tQu6QYYwti56Y5" alt="" width="563"><figcaption></figcaption></figure></div>

To configure default columns:

* Drag a field from **Available Columns** into **Active Table Columns** to add it
* Drag fields within **Active Table Columns** to reorder them
* Remove a column using the delete icon

Changes are reflected immediately in the **Column Preview**.

#### What Default Columns Affect

Default columns determine:

* Which fields are visible in <code class="expression">space.vars.entity</code> lists
* The order of columns in the table
* Which columns can be sorted by users

These settings define the default list view experience for all users. If a user customizes their list view, their personal settings take precedence.

<details>

<summary>Example</summary>

### Bakery example

In an Ingredients <code class="expression">space.vars.object</code>, default columns might include:

* Ingredient Name
* Owner
* Date Bought
* Last Modified
* Amount (lbs.)

Additional fields, such as *On-Hand Quantity* or *Unit Cost*, can be added depending on what users need to see at a glance.

</details>

### Custom Actions Tab

Custom actions define <code class="expression">space.vars.object</code>-specific actions that users can take directly from a <code class="expression">space.vars.entity</code>. Actions typically trigger <code class="expression">space.vars.automations</code> and support <code class="expression">space.vars.entity</code>-based workflows.

<div data-with-frame="true"><figure><img src="/files/wqBPPu4e7mouWTQ2In4F" alt="" width="563"><figcaption></figcaption></figure></div>

#### How Custom Actions Work

Custom actions control the execution state of an <code class="expression">space.vars.automation</code> for a specific <code class="expression">space.vars.entity</code>, allowing users to trigger <code class="expression">space.vars.automations</code> without needing general Start <code class="expression">space.vars.automation</code> permissions.

Each custom action includes:

* **Action Name:** the label shown to users
* **Action type:** defines how the associated <code class="expression">space.vars.automation</code> is controlled when the action is used (for example, start, pause, or cancel).

<div data-with-frame="true"><figure><img src="/files/mcRkmwuXeVEpXXQGB62K" alt="" width="375"><figcaption></figcaption></figure></div>

* **Agentic Workflow:** the <code class="expression">space.vars.automation</code> that runs when the action is used
* **Action Description:** a short explanation of what the action does

Custom actions operate in the context of the selected <code class="expression">space.vars.entity</code> and can also be run in bulk from list views.

<div data-with-frame="true"><figure><img src="/files/4F8ay9CHqo0jZNKobS9P" alt="" width="563"><figcaption></figcaption></figure></div>

#### Visibility and Sharing

Custom actions have their own sharing and permission settings, separate from <code class="expression">space.vars.object</code>-level permissions.

You can control access by:

* **All Team Members**
  * None
  * View/Use
  * Edit
  * Admin
* **Specific Roles**
  * View/Use
  * Edit
  * Admin
* **Specific Team Members**
  * View/Use
  * Edit
  * Admin

This allows actions to be broadly available, role-based, or restricted to individual users.

<div data-with-frame="true"><figure><img src="/files/5LhIN2d4N66L8WDvd6dh" alt="" width="563"><figcaption></figcaption></figure></div>

#### When to use custom actions

Use custom actions to:

* Trigger <code class="expression">space.vars.automations</code> from a <code class="expression">space.vars.entity</code>
* Support approval or review workflows
* Enable <code class="expression">space.vars.entity</code>-based operational tasks

***

## What's Next

After customizing layouts, continue to [Object Permissions](/docs/concepts/objects/object-configuration/object-permissions) to control who can view, create, edit, and delete <code class="expression">space.vars.entities</code> for this <code class="expression">space.vars.object</code>. If you need to add or update fields, see [Custom Fields](broken://pages/6rrJeEIzfjMAZY62pfmc) or review [Records](/docs/concepts/objects/records) to see how data appears to users.

<details>

<summary>Related Topics</summary>

* [Objects Core Concepts](/docs/concepts/objects/object-core-concepts)
* [Object Data Model](/docs/concepts/objects/object-data-model)
* [Object Relationships](/docs/concepts/objects/object-configuration/object-relationships)
* [Object Layout Customization](/docs/concepts/objects/object-configuration/object-layout-customization)
* [Object Permissions](/docs/concepts/objects/object-configuration/object-permissions)

</details>


# Object Permissions

Learn how Object Permissions work in Kizen, including Object visibility, create/edit/remove access, field-level restrictions, Record-level behavior, and how permissions appear in API responses.

{% hint style="success" %}
**Audience:** Admins, Developers, Solution Architects

**Purpose:** Explains how <code class="expression">space.vars.object</code> Permissions control access to <code class="expression">space.vars.object</code>s and their <code class="expression">space.vars.entities</code> across the <code class="expression">space.vars.Kizen\_company\_name</code> platform.
{% endhint %}

## Overview

<code class="expression">space.vars.object</code> permissions determine who can access <code class="expression">space.vars.objects</code> across the platform and who can perform actions within a specific <code class="expression">space.vars.object</code>. These permissions are enforced consistently across the UI, APIs, <code class="expression">space.vars.automations</code>, integrations, and exports.

During <code class="expression">space.vars.object</code> configuration, Related <code class="expression">space.vars.objects</code> appears as Step 5. If Workflows are enabled, it becomes Step 6.

1. General Settings
2. Related Objects
3. Customize Fields
4. Customize Layout
5. <mark style="color:$success;">**Permissions**</mark>

There are two distinct levels of <code class="expression">space.vars.object</code> permissions, and both must be understood to configure access correctly:

1. Platform-level <code class="expression">space.vars.object</code> Permissions (Permission Groups)
2. <code class="expression">space.vars.entity</code>-level Permissions (Permission Groups, but can also be configured inside each <code class="expression">space.vars.object</code>)

Both levels work together to determine a user’s effective access.

***

## Level 1: Platform Object Permissions

<div data-with-frame="true"><figure><img src="/files/coGdTPXQ5obZ6IhLqnOR" alt="" width="563"><figcaption></figcaption></figure></div>

The first and higher-level permissions for <code class="expression">space.vars.objects</code> are configured in **Teams, Roles, and Permissions** (via *Edit Permission Group*). These permissions control whether a user can:

* See <code class="expression">space.vars.objects</code> across the platform
* Create new <code class="expression">space.vars.objects</code>
* Edit <code class="expression">space.vars.object</code> Settings
* Delete <code class="expression">space.vars.objects</code>

Permissions at this level strictly govern access to your ability to edit, create, modify, and view <code class="expression">space.vars.objects</code> across the platform, and are not associated with <code class="expression">space.vars.entity</code> modification or visibility.

For example:

* A user may have permission to view and edit an <code class="expression">space.vars.objects</code> structure or settings, but still be unable to view or create <code class="expression">space.vars.entities</code> inside that <code class="expression">space.vars.object</code>.
* Another user may have permission to view and edit  inside an <code class="expression">space.vars.object</code> but not have access to edit the <code class="expression">space.vars.object</code>'s structure or settings.

### Object Visibility

An <code class="expression">space.vars.object</code> is considered visible to a user when they have **View** permission for that <code class="expression">space.vars.object</code> in their Permission Group or if they have the <code class="expression">space.vars.object</code> <code class="expression">space.vars.entity</code> permission enabled for their group.

If a user does not have **View** permission at this level:

* The <code class="expression">space.vars.object</code> does not appear in the UI
* It may be omitted from metadata endpoints
* API requests involving that object may return empty results or authorization errors

***

## Level 2: Record-Level Permissions

The second level of permissions can be configured within each individual <code class="expression">space.vars.object</code>’s settings or from the Permission Groups Modal. These permissions control which users can access and manage that <code class="expression">space.vars.object</code>’s configuration and what permissions they have within that <code class="expression">space.vars.object</code>.

Both levels work together to determine a user’s effective access. For <code class="expression">space.vars.object</code> Permissions, we'll focus on Level 1.

Review [Record Permissions](broken://pages/uhMfsDTB0PmOzSEoHKUi) for more context on level 2 access.

***

## How Both Levels Work Together

Generally, an admin has permissions at both levels.

| Scenario                                                                                                                                                       | Result                                                                                                                                             |
| -------------------------------------------------------------------------------------------------------------------------------------------------------------- | -------------------------------------------------------------------------------------------------------------------------------------------------- |
| User has <code class="expression">space.vars.object</code> visibility (Level 1) but no <code class="expression">space.vars.entity</code> permissions (Level 2) | <code class="expression">space.vars.object</code> appears, but <code class="expression">space.vars.entities</code> cannot be viewed or modified    |
| User has <code class="expression">space.vars.entity</code> permissions (Level 2) but no <code class="expression">space.vars.object</code> visibility (Level 1) | <code class="expression">space.vars.object</code> still appears, and <code class="expression">space.vars.entities</code> can be viewed or modified |
| User has permissions at both levels                                                                                                                            | Full access based on the combination of both settings                                                                                              |

Misalignment between these two layers is one of the most common causes of:

* “Empty <code class="expression">space.vars.object</code>” experiences
* Missing data reports
* API responses returning empty results
* Confusion about why actions are unavailable

***

## API Behavior and Permissions

Permissions are surfaced directly in API responses so clients can make safe decisions about allowed actions.

When fetching an <code class="expression">space.vars.object</code>, responses include access flags such as:

```json
"access": {
  "view": true,
  "edit": true,
  "remove": true
}
```

These values allow applications and integrations to:

* Hide edit or delete actions when not allowed
* Prevent unauthorized writes
* Avoid operations that will fail
* Safely respond to dynamic permission changes

Structures such as `custom_objects` and `custom_object_entities` also include permission indicators that reflect the current user’s effective access.

***

## Important Considerations

Keep the following in mind when configuring or troubleshooting permissions:

* Do not assume permissions based on role names. Always evaluate effective permissions.
* Platform-level <code class="expression">space.vars.object</code> access does not imply <code class="expression">space.vars.object</code>-level access.
* Missing <code class="expression">space.vars.entities</code> or fields often indicate permission restrictions, not missing data.
* Integrations should always evaluate access flags before attempting write operations.
* Permission misconfiguration is a common cause of empty UI states and empty API responses.

***

## What’s Next

In [Contact Permissions](broken://pages/ZfSbXfWgUab5oeBMU2jp), you’ll learn how <code class="expression">space.vars.entity</code>-level permissions are represented for Contact <code class="expression">space.vars.objects</code> and how they affect create, edit, and bulk actions.

<details>

<summary>Related Topics</summary>

* [Object Core Concepts](/docs/concepts/objects/object-core-concepts)
* [Object Data Model](/docs/concepts/objects/object-data-model)
* [Object Relationships](/docs/concepts/objects/object-configuration/object-relationships)
* [Object Layout Customization](/docs/concepts/objects/object-configuration/object-layout-customization)
* [Object APIs](/docs/concepts/objects/object-apis)

</details>


# Object APIs

Overview of Object APIs and webhooks in Kizen, explaining how to retrieve Object IDs, retrieve Object details data, and trigger workflows for data synchronization.

## Overview

<code class="expression">space.vars.objects</code> can be managed programmatically through APIs, enabling external systems and internal <code class="expression">space.vars.automations</code> to retrieve <code class="expression">space.vars.object</code> metadata, interact with <code class="expression">space.vars.entity</code> data and respond to configuration and <code class="expression">space.vars.entity</code> changes in near real time.

Each subpage focuses on a specific use case, such as Retrieving <code class="expression">space.vars.object</code> IDs or Details, Retrieving <code class="expression">space.vars.object</code> Options, or searching for Specific <code class="expression">space.vars.objects</code> or <code class="expression">space.vars.contacts</code> in the system.

### How Objects & Contacts Are Exposed Programmatically

<code class="expression">space.vars.Kizen\_company\_name</code> exposes <code class="expression">space.vars.objects</code> and <code class="expression">space.vars.contacts</code> through two layers of programmatic access:

#### Object-Level Access

Using APIs to access data at an <code class="expression">space.vars.object</code>-level allows you to better understand the data that exists in the system. You can:

* Retrieve lists of <code class="expression">space.vars.objects</code> and their IDs
* Retrieve <code class="expression">space.vars.object</code> metadata, including available options and custom fields
* Inspect schema details to understand how data is structured
* Search for a specific <code class="expression">space.vars.object</code>

APIs that access data at an <code class="expression">space.vars.object</code>-level are typically used for <code class="expression">space.vars.object</code> discovery, schema inspection, and configuration validation.

#### Record-Level Access

Using APIs to access data at a <code class="expression">space.vars.entity</code> level allows you to work with <code class="expression">space.vars.entities</code> that belong to a specific <code class="expression">space.vars.object</code>. Once an <code class="expression">space.vars.object</code> is identified, you can:

* Create, update, retrieve, and search for <code class="expression">space.vars.entities</code>
* Work with field values
* Synchronize data between systems

For more information, see [Records APIs](/docs/concepts/objects/records/records-apis)

<code class="expression">space.vars.object</code> APIs and <code class="expression">space.vars.entity</code> APIs are designed to work together. Understanding <code class="expression">space.vars.object</code> structure is a prerequisite for safely and reliably working with <code class="expression">space.vars.entity</code> data. For more information, see [Object Data Model](/docs/concepts/objects/object-data-model).

### When to Use APIs

In general:

* Use APIs for request-driven access to metadata and <code class="expression">space.vars.entity</code> data when you need controlled retrieval, synchronization, or validation.

***

## API Topics in this Section

The following <code class="expression">space.vars.object</code> API topics build on the concepts introduced here:

* [List and Search Objects API](/docs/concepts/objects/object-apis/list-and-search-objects-api)
* [Retrieve Object Details by ID API](/docs/concepts/objects/object-apis/retrieve-object-details-by-id-api)

These topics focus on <code class="expression">space.vars.object</code> discovery and metadata, which are typically the first step in any integration involving <code class="expression">space.vars.objects</code>.

***

## What’s Next

Review the individual topics in this section to learn how to work with specific <code class="expression">space.vars.object</code> or <code class="expression">space.vars.contact</code> endpoints. Each page includes an endpoint or event details, examples, and usage considerations.

<details>

<summary>Related Topics</summary>

* [Objects](/docs/concepts/objects)
* [Object API Names](/docs/concepts/objects/object-apis/object-api-names)
* [Contacts](/docs/concepts/objects/contacts)
* [Records](/docs/concepts/objects/records)
* [Custom Fields](/docs/concepts/objects/custom-fields)

</details>


# Object API Names

Learn how API names and object identifiers work in Kizen, including how to reference Objects, Custom Fields, Activities, and Agentic Workflows in API requests.

{% hint style="success" %}
**Audience:** Developers and Solution Architects

**Purpose:** Explains how API names and object identifiers are used in <code class="expression">space.vars.Kizen\_company\_name</code> to reference <code class="expression">space.vars.object</code>, fields, <code class="expression">space.vars.activities</code>, and <code class="expression">space.vars.automations</code> when interacting with the API.
{% endhint %}

## Overview

Each <code class="expression">space.vars.object</code> has an API name that is unique to the business. The API name is automatically derived from the <code class="expression">space.vars.object</code> name, and is displayed in the <code class="expression">space.vars.object</code> settings wizard as a read-only field.

### Object Identifier <a href="#object-identifier" id="object-identifier"></a>

The <code class="expression">space.vars.object</code> identifier is the primary way to interact with the API. The <code class="expression">space.vars.object</code> identifier can be either the  [Object’s API name](/docs/concepts/objects/object-apis/object-api-names), or the Object ID.

The API name of an <code class="expression">space.vars.object</code> is easily accessible in the UI when editing an <code class="expression">space.vars.object</code>. Look for the read-only field **Object API Name**. This value can be used as the object identifier when using the API.

<div data-with-frame="true"><figure><img src="/files/v3zUpSTOfHESblCzO7O1" alt=""><figcaption></figcaption></figure></div>

### Additional API Names <a href="#additional-api-names" id="additional-api-names"></a>

In addition to <code class="expression">space.vars.objects</code>, other types of data have API names associated with them as well:

* Activities
* <code class="expression">space.vars.object</code> Fields
* Activity Fields
* <code class="expression">space.vars.automations</code>

***

## What's Next

Now that you understand how API names and object identifiers are used to reference <code class="expression">space.vars.objects</code> and other entities in the <code class="expression">space.vars.Kizen\_company\_name</code> API, the next step is learning how those identifiers are used to work with actual data.

In the next section, [Records](/docs/concepts/objects/records), you’ll learn how <code class="expression">space.vars.entities</code> represent instances of <code class="expression">space.vars.objects</code>, how data is stored in <code class="expression">space.vars.Kizen\_company\_name</code>, and where to find guidance on creating, retrieving, and searching <code class="expression">space.vars.entities</code> using the API.

<details>

<summary>Related Topics</summary>

* [Object Core Concepts](/docs/concepts/objects/object-core-concepts)
* [Object Data Model](/docs/concepts/objects/object-data-model)
* [Object Relationships](/docs/concepts/objects/object-configuration/object-relationships)
* [Object Layout Customization](/docs/concepts/objects/object-configuration/object-layout-customization)
* [Object Permissions](/docs/concepts/objects/object-configuration/object-permissions)

</details>


# List and Search Objects API

Use the List Custom Objects API to retrieve available object schemas, identifiers, and metadata for building integrations, admin tools, and dynamic workflows.

{% hint style="success" %}
**Audience:** Developers and Solution Architects

**Purpose:** Explains how to retrieve and work with a list of <code class="expression">space.vars.objects</code> programmatically, as well as search for <code class="expression">space.vars.objects</code> and <code class="expression">space.vars.object</code> identifiers.
{% endhint %}

## Overview

Use the **List and Search Objects** endpoints allows you to retrieve and query <code class="expression">space.vars.objects</code> in your Business. You can use them to enumerate all available <code class="expression">space.vars.objects</code> or to search for specific <code class="expression">space.vars.objects</code> based on defined criteria, such as name, type, or behavior.

These endpoints are designed for overview and discovery use cases. They enable external systems to identify which <code class="expression">space.vars.objects</code> exist, retrieve <code class="expression">space.vars.object</code> identifiers and metadata, and support schema-aware integrations, admin tooling, and dynamic configuration flows—without relying on hard-coded <code class="expression">space.vars.object</code> IDs.

The material on this page builds on information covered in [Objects Core Concepts](/docs/concepts/objects/object-core-concepts) and the [Object Data Model](/docs/concepts/objects/object-data-model).

{% hint style="info" %}
**Note:** To retrieve full details for a specific <code class="expression">space.vars.object</code>, such as fields, relationships, layouts, and configuration, use the [Retrieve Object Details by ID API](/docs/concepts/objects/object-apis/retrieve-object-details-by-id-api) endpoint.
{% endhint %}

### Why Would I Use These APIs

Use these endpoints when your integration needs to discover or validate <code class="expression">space.vars.objects</code> programmatically.

Common scenarios include:

* Discovering which <code class="expression">space.vars.objects</code> exist before querying or syncing <code class="expression">space.vars.entities</code>
* Initializing integrations across multiple businesses with different schemas
* Populating <code class="expression">space.vars.object</code> selectors in external tools or admin interfaces
* Retrieving <code class="expression">space.vars.object</code> identifiers (`custom_object_id`, `object_name`) for downstream API calls
* Supporting dynamic, schema-aware integrations
* Filtering or sorting <code class="expression">space.vars.objects</code> by type, usage, or system behavior (for example, workflow vs standard <code class="expression">space.vars.objects</code>)
* Validating <code class="expression">space.vars.object</code> availability before performing operations

Because <code class="expression">space.vars.object</code> configurations can vary between environments, listing and searching <code class="expression">space.vars.objects</code> programmatically helps ensure integrations remain portable, resilient, and scalable.

### List and Search Objects API Behavior

Understanding how these endpoints behave helps prevent common integration mistakes:

* Returns <code class="expression">space.vars.objects</code> based on their current schema configuration
* Results include high-level <code class="expression">space.vars.object</code> metadata only, not field or relationship definitions
* <code class="expression">space.vars.objects</code> may represent standard or workflow schemas
* Only <code class="expression">space.vars.objects</code> are returned by default
  * To include default objects (such as <code class="expression">space.vars.contacts</code>), set `custom_only=false`
* Results are paginated and support filtering, searching, and ordering
* Returned objects can be used immediately as inputs to other APIs (<code class="expression">space.vars.entities</code>, fields, relationships)
* Each result corresponds to a single <code class="expression">space.vars.object</code> definition and includes identifiers and flags that describe how the <code class="expression">space.vars.object</code> behaves across the platform
* Does not return <code class="expression">space.vars.entity</code> data stored within <code class="expression">space.vars.objects</code>

These endpoints are commonly used early in the integration lifecycle to establish schema context before performing data operations.

***

## List Objects API Endpoint

Want to try the API out? Visit our [Swagger](https://app.go.kizen.com/api/docs/public/swagger#/custom-objects/custom_objects_list) docs.

## GET /api/custom-objects

> Custom objects

```json
{"openapi":"3.0.3","info":{"title":"Kizen API","version":"1.0.0"},"security":[{"businessId":[],"userId":[],"apiKey":[]}],"components":{"securitySchemes":{"businessId":{"type":"apiKey","in":"header","name":"X-BUSINESS-ID"}},"schemas":{"PaginatedCustomMinimalObjectsListList":{"type":"object","required":["count","results"],"properties":{"count":{"type":"integer"},"next":{"type":"string","nullable":true,"format":"uri"},"previous":{"type":"string","nullable":true,"format":"uri"},"results":{"type":"array","items":{"$ref":"#/components/schemas/CustomMinimalObjectsList"}},"errors":{"oneOf":[{"type":"null"},{"type":"array","items":{"type":"string"}}]}}},"CustomMinimalObjectsList":{"type":"object","properties":{"fetch_url":{"type":"string"},"id":{"type":"string","format":"uuid"},"name":{"type":"string"},"object_type":{"$ref":"#/components/schemas/CustomObjectObjectTypeEnum"},"object_name":{"type":"string"},"entity_name":{"type":"string"},"rollup_related_leadsources":{"type":"boolean"},"association_source":{"$ref":"#/components/schemas/CustomObjectAssociationSourceEnum"},"has_commerce_data":{"type":"boolean"},"default_on_activities":{"type":"boolean"},"owner":{"$ref":"#/components/schemas/OwnerRead"},"description":{"type":"string"},"is_custom":{"type":"boolean"},"allow_relations":{"type":"boolean"},"created":{"type":"string","format":"date-time"},"access":{"$ref":"#/components/schemas/AccessSerpy"},"track_entity_value":{"type":"boolean"},"include_percentage_to_close":{"type":"boolean"},"use_ai_to_update_percentage":{"type":"boolean"},"ai_confidence_threshold":{"type":"string","format":"decimal","pattern":"^-?\\d{0,8}(?:\\.\\d{0,2})?$"},"allow_on_forms":{"type":"boolean"},"default_color":{"type":"string"},"default_icon":{"type":"string"}},"required":["access","ai_confidence_threshold","allow_on_forms","allow_relations","association_source","created","default_color","default_icon","default_on_activities","description","entity_name","fetch_url","has_commerce_data","id","include_percentage_to_close","is_custom","name","object_name","object_type","owner","rollup_related_leadsources","track_entity_value","use_ai_to_update_percentage"]},"CustomObjectObjectTypeEnum":{"enum":["pipeline","standard"],"type":"string","description":"* `pipeline` - pipeline\n* `standard` - standard"},"CustomObjectAssociationSourceEnum":{"enum":["direct","related","direct_and_related"],"type":"string","description":"* `direct` - Direct\n* `related` - Related\n* `direct_and_related` - Direct and Related"},"OwnerRead":{"type":"object","properties":{"id":{"type":"string","format":"uuid"},"first_name":{"type":"string"},"last_name":{"type":"string"},"email":{"type":"string","format":"email"},"full_name":{"type":"string"},"picture":{"$ref":"#/components/schemas/S3ObjectRead"}},"required":["email","first_name","full_name","id","last_name","picture"]},"S3ObjectRead":{"type":"object","properties":{"id":{"type":"string"},"created":{"type":"string","format":"date-time"},"key":{"type":"string"},"name":{"type":"string"},"url":{"type":"string"},"thumbnail_url":{"type":"string"},"size_bytes":{"type":"string"},"content_type":{"type":"string"},"size_formatted":{"type":"string"},"is_public":{"type":"boolean"}},"required":["content_type","created","id","is_public","key","name","size_bytes","size_formatted","thumbnail_url","url"]},"AccessSerpy":{"type":"object","properties":{"view":{"type":"boolean"},"edit":{"type":"boolean"},"remove":{"type":"boolean"}},"required":["edit","remove","view"]}}},"paths":{"/api/custom-objects":{"get":{"operationId":"custom_objects_list","description":"Custom objects","parameters":[{"in":"query","name":"allow_relations","schema":{"type":"boolean"}},{"in":"query","name":"custom_only","schema":{"type":"boolean","default":true},"description":"Filter Custom Objects for the Client object (is_custom field)"},{"in":"query","name":"default_on_activities","schema":{"type":"boolean"}},{"in":"query","name":"is_custom","schema":{"type":"boolean"}},{"in":"query","name":"name","schema":{"type":"string"}},{"in":"query","name":"object_name","schema":{"type":"string"}},{"in":"query","name":"object_type","schema":{"type":"string","enum":["pipeline","standard"]},"description":"* `pipeline` - pipeline\n* `standard` - standard"},{"in":"query","name":"ordering","schema":{"type":"string","enum":["created","entity_name","number_of_records","object_name","object_type","total_commerce_value","total_pipeline_value","updated"]},"description":"Which field to use when ordering the results. Prepend with '-' for descending order."},{"name":"page","required":false,"in":"query","description":"A page number within the paginated result set.","schema":{"type":"integer"}},{"name":"page_size","required":false,"in":"query","description":"Number of results to return per page.","schema":{"type":"integer"}},{"name":"search","required":false,"in":"query","description":"A search term.","schema":{"type":"string"}}],"tags":["custom-objects"],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/PaginatedCustomMinimalObjectsListList"}}},"description":""}}}}}}
```

### List Objects API Schemas

## The PaginatedCustomMinimalObjectsListList object

```json
{"openapi":"3.0.3","info":{"title":"Kizen API","version":"1.0.0"},"components":{"schemas":{"PaginatedCustomMinimalObjectsListList":{"type":"object","required":["count","results"],"properties":{"count":{"type":"integer"},"next":{"type":"string","nullable":true,"format":"uri"},"previous":{"type":"string","nullable":true,"format":"uri"},"results":{"type":"array","items":{"$ref":"#/components/schemas/CustomMinimalObjectsList"}},"errors":{"oneOf":[{"type":"null"},{"type":"array","items":{"type":"string"}}]}}},"CustomMinimalObjectsList":{"type":"object","properties":{"fetch_url":{"type":"string"},"id":{"type":"string","format":"uuid"},"name":{"type":"string"},"object_type":{"$ref":"#/components/schemas/CustomObjectObjectTypeEnum"},"object_name":{"type":"string"},"entity_name":{"type":"string"},"rollup_related_leadsources":{"type":"boolean"},"association_source":{"$ref":"#/components/schemas/CustomObjectAssociationSourceEnum"},"has_commerce_data":{"type":"boolean"},"default_on_activities":{"type":"boolean"},"owner":{"$ref":"#/components/schemas/OwnerRead"},"description":{"type":"string"},"is_custom":{"type":"boolean"},"allow_relations":{"type":"boolean"},"created":{"type":"string","format":"date-time"},"access":{"$ref":"#/components/schemas/AccessSerpy"},"track_entity_value":{"type":"boolean"},"include_percentage_to_close":{"type":"boolean"},"use_ai_to_update_percentage":{"type":"boolean"},"ai_confidence_threshold":{"type":"string","format":"decimal","pattern":"^-?\\d{0,8}(?:\\.\\d{0,2})?$"},"allow_on_forms":{"type":"boolean"},"default_color":{"type":"string"},"default_icon":{"type":"string"}},"required":["access","ai_confidence_threshold","allow_on_forms","allow_relations","association_source","created","default_color","default_icon","default_on_activities","description","entity_name","fetch_url","has_commerce_data","id","include_percentage_to_close","is_custom","name","object_name","object_type","owner","rollup_related_leadsources","track_entity_value","use_ai_to_update_percentage"]},"CustomObjectObjectTypeEnum":{"enum":["pipeline","standard"],"type":"string","description":"* `pipeline` - pipeline\n* `standard` - standard"},"CustomObjectAssociationSourceEnum":{"enum":["direct","related","direct_and_related"],"type":"string","description":"* `direct` - Direct\n* `related` - Related\n* `direct_and_related` - Direct and Related"},"OwnerRead":{"type":"object","properties":{"id":{"type":"string","format":"uuid"},"first_name":{"type":"string"},"last_name":{"type":"string"},"email":{"type":"string","format":"email"},"full_name":{"type":"string"},"picture":{"$ref":"#/components/schemas/S3ObjectRead"}},"required":["email","first_name","full_name","id","last_name","picture"]},"S3ObjectRead":{"type":"object","properties":{"id":{"type":"string"},"created":{"type":"string","format":"date-time"},"key":{"type":"string"},"name":{"type":"string"},"url":{"type":"string"},"thumbnail_url":{"type":"string"},"size_bytes":{"type":"string"},"content_type":{"type":"string"},"size_formatted":{"type":"string"},"is_public":{"type":"boolean"}},"required":["content_type","created","id","is_public","key","name","size_bytes","size_formatted","thumbnail_url","url"]},"AccessSerpy":{"type":"object","properties":{"view":{"type":"boolean"},"edit":{"type":"boolean"},"remove":{"type":"boolean"}},"required":["edit","remove","view"]}}}}
```

## The CustomMinimalObjectsList object

```json
{"openapi":"3.0.3","info":{"title":"Kizen API","version":"1.0.0"},"components":{"schemas":{"CustomMinimalObjectsList":{"type":"object","properties":{"fetch_url":{"type":"string"},"id":{"type":"string","format":"uuid"},"name":{"type":"string"},"object_type":{"$ref":"#/components/schemas/CustomObjectObjectTypeEnum"},"object_name":{"type":"string"},"entity_name":{"type":"string"},"rollup_related_leadsources":{"type":"boolean"},"association_source":{"$ref":"#/components/schemas/CustomObjectAssociationSourceEnum"},"has_commerce_data":{"type":"boolean"},"default_on_activities":{"type":"boolean"},"owner":{"$ref":"#/components/schemas/OwnerRead"},"description":{"type":"string"},"is_custom":{"type":"boolean"},"allow_relations":{"type":"boolean"},"created":{"type":"string","format":"date-time"},"access":{"$ref":"#/components/schemas/AccessSerpy"},"track_entity_value":{"type":"boolean"},"include_percentage_to_close":{"type":"boolean"},"use_ai_to_update_percentage":{"type":"boolean"},"ai_confidence_threshold":{"type":"string","format":"decimal","pattern":"^-?\\d{0,8}(?:\\.\\d{0,2})?$"},"allow_on_forms":{"type":"boolean"},"default_color":{"type":"string"},"default_icon":{"type":"string"}},"required":["access","ai_confidence_threshold","allow_on_forms","allow_relations","association_source","created","default_color","default_icon","default_on_activities","description","entity_name","fetch_url","has_commerce_data","id","include_percentage_to_close","is_custom","name","object_name","object_type","owner","rollup_related_leadsources","track_entity_value","use_ai_to_update_percentage"]},"CustomObjectObjectTypeEnum":{"enum":["pipeline","standard"],"type":"string","description":"* `pipeline` - pipeline\n* `standard` - standard"},"CustomObjectAssociationSourceEnum":{"enum":["direct","related","direct_and_related"],"type":"string","description":"* `direct` - Direct\n* `related` - Related\n* `direct_and_related` - Direct and Related"},"OwnerRead":{"type":"object","properties":{"id":{"type":"string","format":"uuid"},"first_name":{"type":"string"},"last_name":{"type":"string"},"email":{"type":"string","format":"email"},"full_name":{"type":"string"},"picture":{"$ref":"#/components/schemas/S3ObjectRead"}},"required":["email","first_name","full_name","id","last_name","picture"]},"S3ObjectRead":{"type":"object","properties":{"id":{"type":"string"},"created":{"type":"string","format":"date-time"},"key":{"type":"string"},"name":{"type":"string"},"url":{"type":"string"},"thumbnail_url":{"type":"string"},"size_bytes":{"type":"string"},"content_type":{"type":"string"},"size_formatted":{"type":"string"},"is_public":{"type":"boolean"}},"required":["content_type","created","id","is_public","key","name","size_bytes","size_formatted","thumbnail_url","url"]},"AccessSerpy":{"type":"object","properties":{"view":{"type":"boolean"},"edit":{"type":"boolean"},"remove":{"type":"boolean"}},"required":["edit","remove","view"]}}}}
```

***

## Search Objects API Endpoint

Want to try the API out? Visit our [Swagger](https://app.go.kizen.com/api/docs/public/swagger#/custom-objects/custom_objects_search_create) docs.

## POST /api/custom-objects/search

> Search custom objects

```json
{"openapi":"3.0.3","info":{"title":"Kizen API","version":"1.0.0"},"security":[{"businessId":[],"userId":[],"apiKey":[]}],"components":{"securitySchemes":{"businessId":{"type":"apiKey","in":"header","name":"X-BUSINESS-ID"}},"schemas":{"CustomObjectSearchPayloadRequest":{"type":"object","properties":{"object_ids":{"type":"array","items":{"type":"string","format":"uuid"}}}},"PaginatedCustomMinimalObjectsListList":{"type":"object","required":["count","results"],"properties":{"count":{"type":"integer"},"next":{"type":"string","nullable":true,"format":"uri"},"previous":{"type":"string","nullable":true,"format":"uri"},"results":{"type":"array","items":{"$ref":"#/components/schemas/CustomMinimalObjectsList"}},"errors":{"oneOf":[{"type":"null"},{"type":"array","items":{"type":"string"}}]}}},"CustomMinimalObjectsList":{"type":"object","properties":{"fetch_url":{"type":"string"},"id":{"type":"string","format":"uuid"},"name":{"type":"string"},"object_type":{"$ref":"#/components/schemas/CustomObjectObjectTypeEnum"},"object_name":{"type":"string"},"entity_name":{"type":"string"},"rollup_related_leadsources":{"type":"boolean"},"association_source":{"$ref":"#/components/schemas/CustomObjectAssociationSourceEnum"},"has_commerce_data":{"type":"boolean"},"default_on_activities":{"type":"boolean"},"owner":{"$ref":"#/components/schemas/OwnerRead"},"description":{"type":"string"},"is_custom":{"type":"boolean"},"allow_relations":{"type":"boolean"},"created":{"type":"string","format":"date-time"},"access":{"$ref":"#/components/schemas/AccessSerpy"},"track_entity_value":{"type":"boolean"},"include_percentage_to_close":{"type":"boolean"},"use_ai_to_update_percentage":{"type":"boolean"},"ai_confidence_threshold":{"type":"string","format":"decimal","pattern":"^-?\\d{0,8}(?:\\.\\d{0,2})?$"},"allow_on_forms":{"type":"boolean"},"default_color":{"type":"string"},"default_icon":{"type":"string"}},"required":["access","ai_confidence_threshold","allow_on_forms","allow_relations","association_source","created","default_color","default_icon","default_on_activities","description","entity_name","fetch_url","has_commerce_data","id","include_percentage_to_close","is_custom","name","object_name","object_type","owner","rollup_related_leadsources","track_entity_value","use_ai_to_update_percentage"]},"CustomObjectObjectTypeEnum":{"enum":["pipeline","standard"],"type":"string","description":"* `pipeline` - pipeline\n* `standard` - standard"},"CustomObjectAssociationSourceEnum":{"enum":["direct","related","direct_and_related"],"type":"string","description":"* `direct` - Direct\n* `related` - Related\n* `direct_and_related` - Direct and Related"},"OwnerRead":{"type":"object","properties":{"id":{"type":"string","format":"uuid"},"first_name":{"type":"string"},"last_name":{"type":"string"},"email":{"type":"string","format":"email"},"full_name":{"type":"string"},"picture":{"$ref":"#/components/schemas/S3ObjectRead"}},"required":["email","first_name","full_name","id","last_name","picture"]},"S3ObjectRead":{"type":"object","properties":{"id":{"type":"string"},"created":{"type":"string","format":"date-time"},"key":{"type":"string"},"name":{"type":"string"},"url":{"type":"string"},"thumbnail_url":{"type":"string"},"size_bytes":{"type":"string"},"content_type":{"type":"string"},"size_formatted":{"type":"string"},"is_public":{"type":"boolean"}},"required":["content_type","created","id","is_public","key","name","size_bytes","size_formatted","thumbnail_url","url"]},"AccessSerpy":{"type":"object","properties":{"view":{"type":"boolean"},"edit":{"type":"boolean"},"remove":{"type":"boolean"}},"required":["edit","remove","view"]}}},"paths":{"/api/custom-objects/search":{"post":{"operationId":"custom_objects_search_create","description":"Search custom objects","parameters":[{"in":"query","name":"allow_relations","schema":{"type":"boolean"}},{"in":"query","name":"custom_only","schema":{"type":"boolean","default":true},"description":"Filter Custom Objects for the Client object (is_custom field)"},{"in":"query","name":"default_on_activities","schema":{"type":"boolean"}},{"in":"query","name":"is_custom","schema":{"type":"boolean"}},{"in":"query","name":"name","schema":{"type":"string"}},{"in":"query","name":"object_name","schema":{"type":"string"}},{"in":"query","name":"object_type","schema":{"type":"string","enum":["pipeline","standard"]},"description":"* `pipeline` - pipeline\n* `standard` - standard"},{"in":"query","name":"ordering","schema":{"type":"string","enum":["created","entity_name","number_of_records","object_name","object_type","total_commerce_value","total_pipeline_value","updated"]},"description":"Which field to use when ordering the results. Prepend with '-' for descending order."},{"name":"page","required":false,"in":"query","description":"A page number within the paginated result set.","schema":{"type":"integer"}},{"name":"page_size","required":false,"in":"query","description":"Number of results to return per page.","schema":{"type":"integer"}},{"name":"search","required":false,"in":"query","description":"A search term.","schema":{"type":"string"}}],"tags":["custom-objects"],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/CustomObjectSearchPayloadRequest"}}}},"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/PaginatedCustomMinimalObjectsListList"}}},"description":""}}}}}}
```

### Search Objects API Schemas

## The CustomObjectSearchPayloadRequest object

```json
{"openapi":"3.0.3","info":{"title":"Kizen API","version":"1.0.0"},"components":{"schemas":{"CustomObjectSearchPayloadRequest":{"type":"object","properties":{"object_ids":{"type":"array","items":{"type":"string","format":"uuid"}}}}}}}
```

***

## What's Next?

After retrieving <code class="expression">space.vars.objects</code> via the API, you can:

* Retrieve full <code class="expression">space.vars.object</code> details to inspect schema configuration, including fields and relationships
* Retrieve <code class="expression">space.vars.object</code> fields to understand available data structures and validation rules
* Query, create, or update <code class="expression">space.vars.entities</code> using validated <code class="expression">space.vars.object</code> identifiers
* Use <code class="expression">space.vars.object</code> identifiers when configuring integrations, <code class="expression">space.vars.automations</code>
* Combine <code class="expression">space.vars.object</code> metadata with field and option APIs to build dynamic, schema-aware integrations
* Work with related APIs that depend on <code class="expression">space.vars.object</code> schemas

For more information on <code class="expression">space.vars.objects</code>, check out the following topics:

<details>

<summary>Related Topics</summary>

* [Objects](/docs/concepts/objects)
* [Object APIs](/docs/concepts/objects/object-apis)
* [Object API Names](/docs/concepts/objects/object-apis/object-api-names)
* [Retrieve Object Details by ID API](/docs/concepts/objects/object-apis/retrieve-object-details-by-id-api)
* [Retrieve Object Field Options API](/docs/concepts/objects/custom-fields/custom-field-apis/retrieve-object-field-options-api)

</details>


# Retrieve Object Details by ID API

Retrieve the full schema configuration for a Custom Object by ID, including fields, relationships, and object-level metadata, using the Custom Objects API.

{% hint style="success" %}
**Audience:** Developers and Solution Architects

**Purpose:** Explains how to retrieve the full definition of a specific <code class="expression">space.vars.object</code> by ID so developers can understand its schema, fields, and configuration for use in integrations and workflows.
{% endhint %}

## Overview

Use the **Retrieve Object Details by ID** endpoint to fetch the complete schema definition for a single <code class="expression">space.vars.object</code> in your Business. This includes <code class="expression">space.vars.object</code>-level metadata as well as detailed configuration such as fields, categories, and relationship settings.

This endpoint is designed for schema inspection and integration setup use cases, where an external system needs to understand how a specific <code class="expression">space.vars.object</code> is structured before interacting with its <code class="expression">space.vars.entities</code>.

The material on this page builds on information covered in the [Objects Core Concepts](/docs/concepts/objects/object-core-concepts) and [Object Data Model](/docs/concepts/objects/object-data-model).

{% hint style="info" %}
**Note:** This endpoint returns detailed configuration for one <code class="expression">space.vars.object</code> only. To retrieve a list of available Custom Objects and their identifiers, use the **List Objects** endpoint.
{% endhint %}

### Why Would I Use This API?

You can use the Retrieve <code class="expression">space.vars.object</code> Details by ID API when you need to:

* Inspect the full schema of an <code class="expression">space.vars.object</code> before querying or writing <code class="expression">space.vars.entities</code>
* Retrieve field definitions and identifiers required for <code class="expression">space.vars.entity</code>-level APIs
* Understand <code class="expression">space.vars.object</code> configuration, such as categories or relationship capabilities
* Validate <code class="expression">space.vars.object</code> structure during integration setup or initialization
* Build schema-aware integrations that adapt to different <code class="expression">space.vars.object</code> configurations

### Retrieve Object Details API behavior

Use this endpoint to retrieve the full definition of a <code class="expression">space.vars.object</code> by providing its identifier. It:

* Returns the full schema definition for a single <code class="expression">space.vars.object</code>
* Requires a valid <code class="expression">space.vars.object</code> ID
* Includes <code class="expression">space.vars.object</code> metadata, field definitions, and relationship configuration
* Returns schema-level data only; no <code class="expression">space.vars.entity</code> data is included
* Fails if the specified <code class="expression">space.vars.object</code> ID does not exist or is inaccessible

***

## Retrieve Object Details Endpoint

Want to try the API out? Visit our [Swagger](https://app.go.kizen.com/api/docs/public/swagger#/custom-objects/custom_objects_detail_retrieve) docs.

## GET /api/custom-objects/{object\_pk}/detail

> Custom object with fields and categories

```json
{"openapi":"3.0.3","info":{"title":"Kizen API","version":"1.0.0"},"security":[{"businessId":[],"userId":[],"apiKey":[]}],"components":{"securitySchemes":{"businessId":{"type":"apiKey","in":"header","name":"X-BUSINESS-ID"}},"schemas":{"CustomObjectDetail":{"type":"object","properties":{"id":{"type":"string","format":"uuid","readOnly":true},"object_type":{"$ref":"#/components/schemas/CustomObjectObjectTypeEnum"},"entity_name":{"type":"string","maxLength":200},"object_name":{"type":"string","maxLength":200},"has_commerce_data":{"type":"boolean","default":false},"default_on_activities":{"type":"boolean"},"owner":{"allOf":[{"$ref":"#/components/schemas/SerializerMeta"}],"readOnly":true},"name":{"type":"string"},"description":{"type":"string","nullable":true,"maxLength":500},"ai_description":{"type":"string","readOnly":true,"nullable":true},"is_custom":{"type":"boolean","readOnly":true},"fetch_url":{"type":"string","readOnly":true},"allow_relations":{"type":"boolean","readOnly":true},"meta":{},"related_objects":{"type":"array","items":{"$ref":"#/components/schemas/CustomObjectRelatedObjects"}},"created":{"type":"string","format":"date-time","readOnly":true},"access":{"allOf":[{"$ref":"#/components/schemas/AccessSerpy"}],"readOnly":true},"entity_access":{"type":"boolean","readOnly":true},"rollup_related_leadsources":{"type":"boolean","nullable":true},"quick_filtering_enabled":{"type":"boolean","nullable":true},"record_layouts":{"type":"array","items":{"$ref":"#/components/schemas/EmbeddedRecordLayout"},"readOnly":true},"association_source":{"$ref":"#/components/schemas/CustomObjectAssociationSourceEnum"},"association_source_fields":{"type":"array","items":{"$ref":"#/components/schemas/AssociationSourceField"},"nullable":true},"action_override_create":{"type":"string","nullable":true,"maxLength":512},"field_categories":{"type":"array","items":{"$ref":"#/components/schemas/FieldCategory"},"readOnly":true},"fields":{"type":"array","items":{"$ref":"#/components/schemas/CustomObjectDetailedFieldRead"},"readOnly":true},"pipeline":{"allOf":[{"$ref":"#/components/schemas/CustomObjectPipeline"}],"readOnly":true},"browser_js_actions":{"type":"array","items":{"$ref":"#/components/schemas/BrowserJSAction"},"readOnly":true},"browser_route_scripts":{"type":"array","items":{"$ref":"#/components/schemas/BrowserRouteScript"},"readOnly":true},"custom_actions":{"type":"array","items":{"$ref":"#/components/schemas/CustomActionRead"},"readOnly":true}},"required":["access","ai_description","allow_relations","browser_js_actions","browser_route_scripts","created","custom_actions","default_on_activities","entity_access","entity_name","fetch_url","field_categories","fields","id","is_custom","object_name","owner","pipeline","record_layouts"]},"CustomObjectObjectTypeEnum":{"enum":["pipeline","standard"],"type":"string","description":"* `pipeline` - pipeline\n* `standard` - standard"},"SerializerMeta":{"type":"object","properties":{"picture_url":{"type":"string"},"id":{"type":"string","format":"uuid"},"first_name":{"type":"string"},"last_name":{"type":"string"},"email":{"type":"string","format":"email"},"display_name":{"type":"string"},"account_type":{"type":"string"}},"required":["account_type","display_name","email","first_name","id","last_name","picture_url"]},"CustomObjectRelatedObjects":{"type":"object","properties":{"related_object":{"type":"string","format":"uuid"},"relation_type":{"$ref":"#/components/schemas/CustomObjectRelatedObjectsRelationTypeEnum"},"rollup_timeline":{"type":"boolean","default":false},"rollup_leadsources":{"type":"boolean","default":true},"object_type":{"type":"string","readOnly":true},"object_name":{"type":"string","readOnly":true},"entity_name":{"type":"string","readOnly":true},"field_id":{"type":"string","format":"uuid","nullable":true}},"required":["entity_name","object_name","object_type","related_object","relation_type"]},"CustomObjectRelatedObjectsRelationTypeEnum":{"enum":["one_to_one","primary","additional"],"type":"string","description":"* `one_to_one` - one to one\n* `primary` - primary\n* `additional` - additional"},"AccessSerpy":{"type":"object","properties":{"view":{"type":"boolean"},"edit":{"type":"boolean"},"remove":{"type":"boolean"}},"required":["edit","remove","view"]},"EmbeddedRecordLayout":{"type":"object","properties":{"id":{"type":"string","format":"uuid","readOnly":true},"name":{"type":"string"},"config":{},"tabs":{},"order":{"type":"number","format":"double"}},"required":["id","name"]},"CustomObjectAssociationSourceEnum":{"enum":["direct","related","direct_and_related"],"type":"string","description":"* `direct` - Direct\n* `related` - Related\n* `direct_and_related` - Direct and Related"},"AssociationSourceField":{"type":"object","description":"A serializer that accepts either an 'id' field or an alternate identifier field.\n\nThis serializer class automatically detects which identifier field is being used and\nperforms validation to ensure at least one identifier is provided. It also provides\nutility methods for retrieving objects by their identifiers.\n\nAttributes:\n    IDENTIFIER_FIELD (str): The name of the alternate identifier field. Should be\n        defined in subclasses.\n\nMethods:\n    get_identifier_field(): Determines the alternate identifier field name.\n    validate(attrs): Ensures either 'id' or the alternate identifier is provided.\n    get_identifier_values(data, values_map, queryset): Retrieves objects by their identifiers.","properties":{"id":{"type":"string","format":"uuid","nullable":true,"description":"Required if \"name\" is not provided."},"name":{"type":"string","nullable":true,"description":"Required if \"id\" is not provided."},"related_field":{"type":"string","readOnly":true},"related_object":{"type":"string","readOnly":true}},"required":["related_field","related_object"]},"FieldCategory":{"type":"object","properties":{"id":{"type":"string","format":"uuid"},"name":{"type":"string"},"order":{"type":"integer"}},"required":["id","name","order"]},"CustomObjectDetailedFieldRead":{"type":"object","properties":{"id":{"type":"string","format":"uuid"},"name":{"type":"string"},"category":{"type":"string","format":"uuid"},"display_name":{"type":"string"},"canonical_display_name":{"type":"string"},"is_default":{"type":"boolean"},"field_type":{"$ref":"#/components/schemas/FieldTypeEnum"},"is_required":{"type":"boolean"},"is_read_only":{"type":"boolean"},"is_hidden":{"type":"boolean"},"is_deletable":{"type":"boolean"},"is_hideable":{"type":"boolean"},"is_suppressed":{"type":"boolean"},"include_in_short_form":{"type":"string"},"allows_nulls":{"type":"boolean"},"allows_empty":{"type":"boolean"},"order":{"type":"integer"},"meta":{"type":"object","additionalProperties":{}},"description":{"type":"string"},"description_visibility":{"$ref":"#/components/schemas/DescriptionVisibilityEnum"},"properties":{"type":"object","additionalProperties":{}},"access":{"$ref":"#/components/schemas/AccessSerpy"},"options":{"type":"array","items":{"$ref":"#/components/schemas/FieldOptionSerpy"}},"relation":{"$ref":"#/components/schemas/CustomObjectFieldRelation"},"allow_on_forms":{"type":"boolean"}},"required":["access","allow_on_forms","allows_empty","allows_nulls","canonical_display_name","category","description","description_visibility","display_name","field_type","id","include_in_short_form","is_default","is_deletable","is_hidden","is_hideable","is_read_only","is_required","is_suppressed","meta","name","options","order","properties","relation"]},"FieldTypeEnum":{"enum":["checkbox","checkboxes","choices","date","datetime","decimal","dropdown","dynamictags","email","files","integer","longtext","money","phonenumber","radio","rating","relationship","selector","status","team_selector","text","timezone","wysiwyg","yesnomaybe"],"type":"string","description":"* `checkbox` - Checkbox\n* `checkboxes` - Checkboxes\n* `choices` - Choices\n* `date` - Date\n* `datetime` - Datetime\n* `decimal` - Decimal Number\n* `dropdown` - Dropdown\n* `dynamictags` - Dynamic Tags\n* `email` - Email\n* `files` - Files\n* `integer` - Whole Number\n* `longtext` - Long Text\n* `money` - Money\n* `phonenumber` - Phone Number\n* `radio` - Radio\n* `rating` - Rating\n* `relationship` - Relationship\n* `selector` - Selector\n* `status` - Status\n* `team_selector` - Team Selector\n* `text` - Text\n* `timezone` - Timezone\n* `wysiwyg` - Wysiwyg\n* `yesnomaybe` - Yes / No / Maybe Question"},"DescriptionVisibilityEnum":{"enum":["all","create_only","settings_only"],"type":"string","description":"* `all` - All Labels\n* `create_only` - Only on Create\n* `settings_only` - Only in Settings"},"FieldOptionSerpy":{"type":"object","properties":{"id":{"type":"string","format":"uuid"},"code":{"type":"string"},"name":{"type":"string"},"order":{"type":"integer"},"meta":{"type":"object","additionalProperties":{}},"percentage_chance_to_close":{"type":"integer"},"chance_to_close_percentage":{"type":"integer"},"status":{"$ref":"#/components/schemas/PipelineStageStatusEnum"}},"required":["chance_to_close_percentage","code","id","meta","name","order","percentage_chance_to_close","status"]},"PipelineStageStatusEnum":{"enum":["open","won","lost","disqualified"],"type":"string","description":"* `open` - open\n* `won` - won\n* `lost` - lost\n* `disqualified` - disqualified"},"CustomObjectFieldRelation":{"type":"object","properties":{"related_field":{"type":"string","format":"uuid","readOnly":true},"related_object":{"type":"string","format":"uuid"},"related_category":{"type":"string","format":"uuid","nullable":true},"related_name":{"type":"string","nullable":true},"related_object_name":{"type":"string","readOnly":true},"related_object_object_name":{"type":"string","readOnly":true},"related_entity_name":{"type":"string","readOnly":true},"relation_type":{"$ref":"#/components/schemas/FieldRelationTypeEnum"},"cardinality":{"allOf":[{"$ref":"#/components/schemas/CardinalityEnum"}],"readOnly":true},"fetch_url":{"type":"string","readOnly":true},"rollup_timeline":{"type":"boolean"},"rollup_leadsources":{"type":"boolean"},"inverse_relation_rollup_timeline":{"type":"boolean"},"inverse_relation_rollup_leadsources":{"type":"boolean"},"inverse_relation_suppressed":{"type":"boolean"},"related_object_default_on_activities":{"type":"string","readOnly":true}},"required":["cardinality","fetch_url","related_category","related_entity_name","related_field","related_object","related_object_default_on_activities","related_object_name","related_object_object_name"]},"FieldRelationTypeEnum":{"enum":["one_to_one","primary","additional","primary_for","additional_for"],"type":"string","description":"* `one_to_one` - one to one\n* `primary` - primary\n* `additional` - additional\n* `primary_for` - primary for\n* `additional_for` - additional for"},"CardinalityEnum":{"enum":["one_to_one","many_to_many","many_to_one","one_to_many"],"type":"string","description":"* `one_to_one` - 1 to 1\n* `many_to_many` - Many to Many\n* `many_to_one` - Many to 1\n* `one_to_many` - 1 to Many"},"CustomObjectPipeline":{"type":"object","properties":{"stages":{"type":"array","items":{"$ref":"#/components/schemas/PipelineStage"}},"track_entity_value":{"type":"boolean"},"include_percentage_to_close":{"type":"boolean"},"use_ai_to_update_percentage":{"type":"boolean"}},"required":["stages"]},"PipelineStage":{"type":"object","properties":{"id":{"type":"string","format":"uuid"},"name":{"type":"string"},"status":{"$ref":"#/components/schemas/PipelineStageStatusEnum"},"percentage_chance_to_close":{"type":"integer","maximum":100,"minimum":0,"nullable":true},"order":{"type":"integer","maximum":32767,"minimum":0}},"required":["name","order","status"]},"BrowserJSAction":{"type":"object","properties":{"id":{"type":"string","format":"uuid"},"api_name":{"type":"string"},"name":{"type":"string"},"script":{"type":"string"},"plugin_app":{"$ref":"#/components/schemas/PluginAppLight"}},"required":["api_name","id","name","plugin_app","script"]},"PluginAppLight":{"type":"object","properties":{"id":{"type":"string","format":"uuid"},"api_name":{"type":"string"},"base_config":{}},"required":["api_name","base_config","id"]},"BrowserRouteScript":{"type":"object","properties":{"id":{"type":"string","format":"uuid"},"api_name":{"type":"string"},"name":{"type":"string"},"routes":{},"script":{"type":"string"},"blocking":{"type":"boolean"},"custom_object":{"$ref":"#/components/schemas/_CustomObject"},"plugin_app":{"$ref":"#/components/schemas/PluginAppLight"}},"required":["api_name","blocking","custom_object","id","name","plugin_app","routes","script"]},"_CustomObject":{"type":"object","properties":{"id":{"type":"string","format":"uuid"},"name":{"type":"string"},"object_name":{"type":"string"}},"required":["id","name","object_name"]},"CustomActionRead":{"type":"object","properties":{"id":{"type":"string","format":"uuid"},"name":{"type":"string"},"description":{"type":"string"},"action":{"type":"string"},"automation":{"allOf":[{"$ref":"#/components/schemas/_CustomActionAutomation"}],"nullable":true},"smart_connector":{"allOf":[{"$ref":"#/components/schemas/_CustomActionSmartConnector"}],"nullable":true},"order":{"type":"integer"}},"required":["action","description","id","name","order"]},"_CustomActionAutomation":{"type":"object","properties":{"id":{"type":"string","format":"uuid"},"api_name":{"type":"string"},"name":{"type":"string"}},"required":["api_name","id","name"]},"_CustomActionSmartConnector":{"type":"object","properties":{"id":{"type":"string","format":"uuid"},"name":{"type":"string"}},"required":["id","name"]}}},"paths":{"/api/custom-objects/{object_pk}/detail":{"get":{"operationId":"custom_objects_detail_retrieve","description":"Custom object with fields and categories","parameters":[{"in":"path","name":"object_pk","schema":{"type":"string","format":"uuid"},"required":true}],"tags":["custom-objects"],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/CustomObjectDetail"}}},"description":""}}}}}}
```

### Retrieve Object Details by ID API Schemas

## The CustomObjectDetail object

```json
{"openapi":"3.0.3","info":{"title":"Kizen API","version":"1.0.0"},"components":{"schemas":{"CustomObjectDetail":{"type":"object","properties":{"id":{"type":"string","format":"uuid","readOnly":true},"object_type":{"$ref":"#/components/schemas/CustomObjectObjectTypeEnum"},"entity_name":{"type":"string","maxLength":200},"object_name":{"type":"string","maxLength":200},"has_commerce_data":{"type":"boolean","default":false},"default_on_activities":{"type":"boolean"},"owner":{"allOf":[{"$ref":"#/components/schemas/SerializerMeta"}],"readOnly":true},"name":{"type":"string"},"description":{"type":"string","nullable":true,"maxLength":500},"ai_description":{"type":"string","readOnly":true,"nullable":true},"is_custom":{"type":"boolean","readOnly":true},"fetch_url":{"type":"string","readOnly":true},"allow_relations":{"type":"boolean","readOnly":true},"meta":{},"related_objects":{"type":"array","items":{"$ref":"#/components/schemas/CustomObjectRelatedObjects"}},"created":{"type":"string","format":"date-time","readOnly":true},"access":{"allOf":[{"$ref":"#/components/schemas/AccessSerpy"}],"readOnly":true},"entity_access":{"type":"boolean","readOnly":true},"rollup_related_leadsources":{"type":"boolean","nullable":true},"quick_filtering_enabled":{"type":"boolean","nullable":true},"record_layouts":{"type":"array","items":{"$ref":"#/components/schemas/EmbeddedRecordLayout"},"readOnly":true},"association_source":{"$ref":"#/components/schemas/CustomObjectAssociationSourceEnum"},"association_source_fields":{"type":"array","items":{"$ref":"#/components/schemas/AssociationSourceField"},"nullable":true},"action_override_create":{"type":"string","nullable":true,"maxLength":512},"field_categories":{"type":"array","items":{"$ref":"#/components/schemas/FieldCategory"},"readOnly":true},"fields":{"type":"array","items":{"$ref":"#/components/schemas/CustomObjectDetailedFieldRead"},"readOnly":true},"pipeline":{"allOf":[{"$ref":"#/components/schemas/CustomObjectPipeline"}],"readOnly":true},"browser_js_actions":{"type":"array","items":{"$ref":"#/components/schemas/BrowserJSAction"},"readOnly":true},"browser_route_scripts":{"type":"array","items":{"$ref":"#/components/schemas/BrowserRouteScript"},"readOnly":true},"custom_actions":{"type":"array","items":{"$ref":"#/components/schemas/CustomActionRead"},"readOnly":true}},"required":["access","ai_description","allow_relations","browser_js_actions","browser_route_scripts","created","custom_actions","default_on_activities","entity_access","entity_name","fetch_url","field_categories","fields","id","is_custom","object_name","owner","pipeline","record_layouts"]},"CustomObjectObjectTypeEnum":{"enum":["pipeline","standard"],"type":"string","description":"* `pipeline` - pipeline\n* `standard` - standard"},"SerializerMeta":{"type":"object","properties":{"picture_url":{"type":"string"},"id":{"type":"string","format":"uuid"},"first_name":{"type":"string"},"last_name":{"type":"string"},"email":{"type":"string","format":"email"},"display_name":{"type":"string"},"account_type":{"type":"string"}},"required":["account_type","display_name","email","first_name","id","last_name","picture_url"]},"CustomObjectRelatedObjects":{"type":"object","properties":{"related_object":{"type":"string","format":"uuid"},"relation_type":{"$ref":"#/components/schemas/CustomObjectRelatedObjectsRelationTypeEnum"},"rollup_timeline":{"type":"boolean","default":false},"rollup_leadsources":{"type":"boolean","default":true},"object_type":{"type":"string","readOnly":true},"object_name":{"type":"string","readOnly":true},"entity_name":{"type":"string","readOnly":true},"field_id":{"type":"string","format":"uuid","nullable":true}},"required":["entity_name","object_name","object_type","related_object","relation_type"]},"CustomObjectRelatedObjectsRelationTypeEnum":{"enum":["one_to_one","primary","additional"],"type":"string","description":"* `one_to_one` - one to one\n* `primary` - primary\n* `additional` - additional"},"AccessSerpy":{"type":"object","properties":{"view":{"type":"boolean"},"edit":{"type":"boolean"},"remove":{"type":"boolean"}},"required":["edit","remove","view"]},"EmbeddedRecordLayout":{"type":"object","properties":{"id":{"type":"string","format":"uuid","readOnly":true},"name":{"type":"string"},"config":{},"tabs":{},"order":{"type":"number","format":"double"}},"required":["id","name"]},"CustomObjectAssociationSourceEnum":{"enum":["direct","related","direct_and_related"],"type":"string","description":"* `direct` - Direct\n* `related` - Related\n* `direct_and_related` - Direct and Related"},"AssociationSourceField":{"type":"object","description":"A serializer that accepts either an 'id' field or an alternate identifier field.\n\nThis serializer class automatically detects which identifier field is being used and\nperforms validation to ensure at least one identifier is provided. It also provides\nutility methods for retrieving objects by their identifiers.\n\nAttributes:\n    IDENTIFIER_FIELD (str): The name of the alternate identifier field. Should be\n        defined in subclasses.\n\nMethods:\n    get_identifier_field(): Determines the alternate identifier field name.\n    validate(attrs): Ensures either 'id' or the alternate identifier is provided.\n    get_identifier_values(data, values_map, queryset): Retrieves objects by their identifiers.","properties":{"id":{"type":"string","format":"uuid","nullable":true,"description":"Required if \"name\" is not provided."},"name":{"type":"string","nullable":true,"description":"Required if \"id\" is not provided."},"related_field":{"type":"string","readOnly":true},"related_object":{"type":"string","readOnly":true}},"required":["related_field","related_object"]},"FieldCategory":{"type":"object","properties":{"id":{"type":"string","format":"uuid"},"name":{"type":"string"},"order":{"type":"integer"}},"required":["id","name","order"]},"CustomObjectDetailedFieldRead":{"type":"object","properties":{"id":{"type":"string","format":"uuid"},"name":{"type":"string"},"category":{"type":"string","format":"uuid"},"display_name":{"type":"string"},"canonical_display_name":{"type":"string"},"is_default":{"type":"boolean"},"field_type":{"$ref":"#/components/schemas/FieldTypeEnum"},"is_required":{"type":"boolean"},"is_read_only":{"type":"boolean"},"is_hidden":{"type":"boolean"},"is_deletable":{"type":"boolean"},"is_hideable":{"type":"boolean"},"is_suppressed":{"type":"boolean"},"include_in_short_form":{"type":"string"},"allows_nulls":{"type":"boolean"},"allows_empty":{"type":"boolean"},"order":{"type":"integer"},"meta":{"type":"object","additionalProperties":{}},"description":{"type":"string"},"description_visibility":{"$ref":"#/components/schemas/DescriptionVisibilityEnum"},"properties":{"type":"object","additionalProperties":{}},"access":{"$ref":"#/components/schemas/AccessSerpy"},"options":{"type":"array","items":{"$ref":"#/components/schemas/FieldOptionSerpy"}},"relation":{"$ref":"#/components/schemas/CustomObjectFieldRelation"},"allow_on_forms":{"type":"boolean"}},"required":["access","allow_on_forms","allows_empty","allows_nulls","canonical_display_name","category","description","description_visibility","display_name","field_type","id","include_in_short_form","is_default","is_deletable","is_hidden","is_hideable","is_read_only","is_required","is_suppressed","meta","name","options","order","properties","relation"]},"FieldTypeEnum":{"enum":["checkbox","checkboxes","choices","date","datetime","decimal","dropdown","dynamictags","email","files","integer","longtext","money","phonenumber","radio","rating","relationship","selector","status","team_selector","text","timezone","wysiwyg","yesnomaybe"],"type":"string","description":"* `checkbox` - Checkbox\n* `checkboxes` - Checkboxes\n* `choices` - Choices\n* `date` - Date\n* `datetime` - Datetime\n* `decimal` - Decimal Number\n* `dropdown` - Dropdown\n* `dynamictags` - Dynamic Tags\n* `email` - Email\n* `files` - Files\n* `integer` - Whole Number\n* `longtext` - Long Text\n* `money` - Money\n* `phonenumber` - Phone Number\n* `radio` - Radio\n* `rating` - Rating\n* `relationship` - Relationship\n* `selector` - Selector\n* `status` - Status\n* `team_selector` - Team Selector\n* `text` - Text\n* `timezone` - Timezone\n* `wysiwyg` - Wysiwyg\n* `yesnomaybe` - Yes / No / Maybe Question"},"DescriptionVisibilityEnum":{"enum":["all","create_only","settings_only"],"type":"string","description":"* `all` - All Labels\n* `create_only` - Only on Create\n* `settings_only` - Only in Settings"},"FieldOptionSerpy":{"type":"object","properties":{"id":{"type":"string","format":"uuid"},"code":{"type":"string"},"name":{"type":"string"},"order":{"type":"integer"},"meta":{"type":"object","additionalProperties":{}},"percentage_chance_to_close":{"type":"integer"},"chance_to_close_percentage":{"type":"integer"},"status":{"$ref":"#/components/schemas/PipelineStageStatusEnum"}},"required":["chance_to_close_percentage","code","id","meta","name","order","percentage_chance_to_close","status"]},"PipelineStageStatusEnum":{"enum":["open","won","lost","disqualified"],"type":"string","description":"* `open` - open\n* `won` - won\n* `lost` - lost\n* `disqualified` - disqualified"},"CustomObjectFieldRelation":{"type":"object","properties":{"related_field":{"type":"string","format":"uuid","readOnly":true},"related_object":{"type":"string","format":"uuid"},"related_category":{"type":"string","format":"uuid","nullable":true},"related_name":{"type":"string","nullable":true},"related_object_name":{"type":"string","readOnly":true},"related_object_object_name":{"type":"string","readOnly":true},"related_entity_name":{"type":"string","readOnly":true},"relation_type":{"$ref":"#/components/schemas/FieldRelationTypeEnum"},"cardinality":{"allOf":[{"$ref":"#/components/schemas/CardinalityEnum"}],"readOnly":true},"fetch_url":{"type":"string","readOnly":true},"rollup_timeline":{"type":"boolean"},"rollup_leadsources":{"type":"boolean"},"inverse_relation_rollup_timeline":{"type":"boolean"},"inverse_relation_rollup_leadsources":{"type":"boolean"},"inverse_relation_suppressed":{"type":"boolean"},"related_object_default_on_activities":{"type":"string","readOnly":true}},"required":["cardinality","fetch_url","related_category","related_entity_name","related_field","related_object","related_object_default_on_activities","related_object_name","related_object_object_name"]},"FieldRelationTypeEnum":{"enum":["one_to_one","primary","additional","primary_for","additional_for"],"type":"string","description":"* `one_to_one` - one to one\n* `primary` - primary\n* `additional` - additional\n* `primary_for` - primary for\n* `additional_for` - additional for"},"CardinalityEnum":{"enum":["one_to_one","many_to_many","many_to_one","one_to_many"],"type":"string","description":"* `one_to_one` - 1 to 1\n* `many_to_many` - Many to Many\n* `many_to_one` - Many to 1\n* `one_to_many` - 1 to Many"},"CustomObjectPipeline":{"type":"object","properties":{"stages":{"type":"array","items":{"$ref":"#/components/schemas/PipelineStage"}},"track_entity_value":{"type":"boolean"},"include_percentage_to_close":{"type":"boolean"},"use_ai_to_update_percentage":{"type":"boolean"}},"required":["stages"]},"PipelineStage":{"type":"object","properties":{"id":{"type":"string","format":"uuid"},"name":{"type":"string"},"status":{"$ref":"#/components/schemas/PipelineStageStatusEnum"},"percentage_chance_to_close":{"type":"integer","maximum":100,"minimum":0,"nullable":true},"order":{"type":"integer","maximum":32767,"minimum":0}},"required":["name","order","status"]},"BrowserJSAction":{"type":"object","properties":{"id":{"type":"string","format":"uuid"},"api_name":{"type":"string"},"name":{"type":"string"},"script":{"type":"string"},"plugin_app":{"$ref":"#/components/schemas/PluginAppLight"}},"required":["api_name","id","name","plugin_app","script"]},"PluginAppLight":{"type":"object","properties":{"id":{"type":"string","format":"uuid"},"api_name":{"type":"string"},"base_config":{}},"required":["api_name","base_config","id"]},"BrowserRouteScript":{"type":"object","properties":{"id":{"type":"string","format":"uuid"},"api_name":{"type":"string"},"name":{"type":"string"},"routes":{},"script":{"type":"string"},"blocking":{"type":"boolean"},"custom_object":{"$ref":"#/components/schemas/_CustomObject"},"plugin_app":{"$ref":"#/components/schemas/PluginAppLight"}},"required":["api_name","blocking","custom_object","id","name","plugin_app","routes","script"]},"_CustomObject":{"type":"object","properties":{"id":{"type":"string","format":"uuid"},"name":{"type":"string"},"object_name":{"type":"string"}},"required":["id","name","object_name"]},"CustomActionRead":{"type":"object","properties":{"id":{"type":"string","format":"uuid"},"name":{"type":"string"},"description":{"type":"string"},"action":{"type":"string"},"automation":{"allOf":[{"$ref":"#/components/schemas/_CustomActionAutomation"}],"nullable":true},"smart_connector":{"allOf":[{"$ref":"#/components/schemas/_CustomActionSmartConnector"}],"nullable":true},"order":{"type":"integer"}},"required":["action","description","id","name","order"]},"_CustomActionAutomation":{"type":"object","properties":{"id":{"type":"string","format":"uuid"},"api_name":{"type":"string"},"name":{"type":"string"}},"required":["api_name","id","name"]},"_CustomActionSmartConnector":{"type":"object","properties":{"id":{"type":"string","format":"uuid"},"name":{"type":"string"}},"required":["id","name"]}}}}
```

## The \_CustomObject object

```json
{"openapi":"3.0.3","info":{"title":"Kizen API","version":"1.0.0"},"components":{"schemas":{"_CustomObject":{"type":"object","properties":{"id":{"type":"string","format":"uuid"},"name":{"type":"string"},"object_name":{"type":"string"}},"required":["id","name","object_name"]}}}}
```

## The AccessSerpy object

```json
{"openapi":"3.0.3","info":{"title":"Kizen API","version":"1.0.0"},"components":{"schemas":{"AccessSerpy":{"type":"object","properties":{"view":{"type":"boolean"},"edit":{"type":"boolean"},"remove":{"type":"boolean"}},"required":["edit","remove","view"]}}}}
```

## The CustomObjectDetailedFieldRead object

```json
{"openapi":"3.0.3","info":{"title":"Kizen API","version":"1.0.0"},"components":{"schemas":{"CustomObjectDetailedFieldRead":{"type":"object","properties":{"id":{"type":"string","format":"uuid"},"name":{"type":"string"},"category":{"type":"string","format":"uuid"},"display_name":{"type":"string"},"canonical_display_name":{"type":"string"},"is_default":{"type":"boolean"},"field_type":{"$ref":"#/components/schemas/FieldTypeEnum"},"is_required":{"type":"boolean"},"is_read_only":{"type":"boolean"},"is_hidden":{"type":"boolean"},"is_deletable":{"type":"boolean"},"is_hideable":{"type":"boolean"},"is_suppressed":{"type":"boolean"},"include_in_short_form":{"type":"string"},"allows_nulls":{"type":"boolean"},"allows_empty":{"type":"boolean"},"order":{"type":"integer"},"meta":{"type":"object","additionalProperties":{}},"description":{"type":"string"},"description_visibility":{"$ref":"#/components/schemas/DescriptionVisibilityEnum"},"properties":{"type":"object","additionalProperties":{}},"access":{"$ref":"#/components/schemas/AccessSerpy"},"options":{"type":"array","items":{"$ref":"#/components/schemas/FieldOptionSerpy"}},"relation":{"$ref":"#/components/schemas/CustomObjectFieldRelation"},"allow_on_forms":{"type":"boolean"}},"required":["access","allow_on_forms","allows_empty","allows_nulls","canonical_display_name","category","description","description_visibility","display_name","field_type","id","include_in_short_form","is_default","is_deletable","is_hidden","is_hideable","is_read_only","is_required","is_suppressed","meta","name","options","order","properties","relation"]},"FieldTypeEnum":{"enum":["checkbox","checkboxes","choices","date","datetime","decimal","dropdown","dynamictags","email","files","integer","longtext","money","phonenumber","radio","rating","relationship","selector","status","team_selector","text","timezone","wysiwyg","yesnomaybe"],"type":"string","description":"* `checkbox` - Checkbox\n* `checkboxes` - Checkboxes\n* `choices` - Choices\n* `date` - Date\n* `datetime` - Datetime\n* `decimal` - Decimal Number\n* `dropdown` - Dropdown\n* `dynamictags` - Dynamic Tags\n* `email` - Email\n* `files` - Files\n* `integer` - Whole Number\n* `longtext` - Long Text\n* `money` - Money\n* `phonenumber` - Phone Number\n* `radio` - Radio\n* `rating` - Rating\n* `relationship` - Relationship\n* `selector` - Selector\n* `status` - Status\n* `team_selector` - Team Selector\n* `text` - Text\n* `timezone` - Timezone\n* `wysiwyg` - Wysiwyg\n* `yesnomaybe` - Yes / No / Maybe Question"},"DescriptionVisibilityEnum":{"enum":["all","create_only","settings_only"],"type":"string","description":"* `all` - All Labels\n* `create_only` - Only on Create\n* `settings_only` - Only in Settings"},"AccessSerpy":{"type":"object","properties":{"view":{"type":"boolean"},"edit":{"type":"boolean"},"remove":{"type":"boolean"}},"required":["edit","remove","view"]},"FieldOptionSerpy":{"type":"object","properties":{"id":{"type":"string","format":"uuid"},"code":{"type":"string"},"name":{"type":"string"},"order":{"type":"integer"},"meta":{"type":"object","additionalProperties":{}},"percentage_chance_to_close":{"type":"integer"},"chance_to_close_percentage":{"type":"integer"},"status":{"$ref":"#/components/schemas/PipelineStageStatusEnum"}},"required":["chance_to_close_percentage","code","id","meta","name","order","percentage_chance_to_close","status"]},"PipelineStageStatusEnum":{"enum":["open","won","lost","disqualified"],"type":"string","description":"* `open` - open\n* `won` - won\n* `lost` - lost\n* `disqualified` - disqualified"},"CustomObjectFieldRelation":{"type":"object","properties":{"related_field":{"type":"string","format":"uuid","readOnly":true},"related_object":{"type":"string","format":"uuid"},"related_category":{"type":"string","format":"uuid","nullable":true},"related_name":{"type":"string","nullable":true},"related_object_name":{"type":"string","readOnly":true},"related_object_object_name":{"type":"string","readOnly":true},"related_entity_name":{"type":"string","readOnly":true},"relation_type":{"$ref":"#/components/schemas/FieldRelationTypeEnum"},"cardinality":{"allOf":[{"$ref":"#/components/schemas/CardinalityEnum"}],"readOnly":true},"fetch_url":{"type":"string","readOnly":true},"rollup_timeline":{"type":"boolean"},"rollup_leadsources":{"type":"boolean"},"inverse_relation_rollup_timeline":{"type":"boolean"},"inverse_relation_rollup_leadsources":{"type":"boolean"},"inverse_relation_suppressed":{"type":"boolean"},"related_object_default_on_activities":{"type":"string","readOnly":true}},"required":["cardinality","fetch_url","related_category","related_entity_name","related_field","related_object","related_object_default_on_activities","related_object_name","related_object_object_name"]},"FieldRelationTypeEnum":{"enum":["one_to_one","primary","additional","primary_for","additional_for"],"type":"string","description":"* `one_to_one` - one to one\n* `primary` - primary\n* `additional` - additional\n* `primary_for` - primary for\n* `additional_for` - additional for"},"CardinalityEnum":{"enum":["one_to_one","many_to_many","many_to_one","one_to_many"],"type":"string","description":"* `one_to_one` - 1 to 1\n* `many_to_many` - Many to Many\n* `many_to_one` - Many to 1\n* `one_to_many` - 1 to Many"}}}}
```

## The FieldCategory object

```json
{"openapi":"3.0.3","info":{"title":"Kizen API","version":"1.0.0"},"components":{"schemas":{"FieldCategory":{"type":"object","properties":{"id":{"type":"string","format":"uuid"},"name":{"type":"string"},"order":{"type":"integer"}},"required":["id","name","order"]}}}}
```

## The FieldOptionSerpy object

```json
{"openapi":"3.0.3","info":{"title":"Kizen API","version":"1.0.0"},"components":{"schemas":{"FieldOptionSerpy":{"type":"object","properties":{"id":{"type":"string","format":"uuid"},"code":{"type":"string"},"name":{"type":"string"},"order":{"type":"integer"},"meta":{"type":"object","additionalProperties":{}},"percentage_chance_to_close":{"type":"integer"},"chance_to_close_percentage":{"type":"integer"},"status":{"$ref":"#/components/schemas/PipelineStageStatusEnum"}},"required":["chance_to_close_percentage","code","id","meta","name","order","percentage_chance_to_close","status"]},"PipelineStageStatusEnum":{"enum":["open","won","lost","disqualified"],"type":"string","description":"* `open` - open\n* `won` - won\n* `lost` - lost\n* `disqualified` - disqualified"}}}}
```

## The CustomObjectRelatedObjects object

```json
{"openapi":"3.0.3","info":{"title":"Kizen API","version":"1.0.0"},"components":{"schemas":{"CustomObjectRelatedObjects":{"type":"object","properties":{"related_object":{"type":"string","format":"uuid"},"relation_type":{"$ref":"#/components/schemas/CustomObjectRelatedObjectsRelationTypeEnum"},"rollup_timeline":{"type":"boolean","default":false},"rollup_leadsources":{"type":"boolean","default":true},"object_type":{"type":"string","readOnly":true},"object_name":{"type":"string","readOnly":true},"entity_name":{"type":"string","readOnly":true},"field_id":{"type":"string","format":"uuid","nullable":true}},"required":["entity_name","object_name","object_type","related_object","relation_type"]},"CustomObjectRelatedObjectsRelationTypeEnum":{"enum":["one_to_one","primary","additional"],"type":"string","description":"* `one_to_one` - one to one\n* `primary` - primary\n* `additional` - additional"}}}}
```

## The CustomObjectFieldRelation object

```json
{"openapi":"3.0.3","info":{"title":"Kizen API","version":"1.0.0"},"components":{"schemas":{"CustomObjectFieldRelation":{"type":"object","properties":{"related_field":{"type":"string","format":"uuid","readOnly":true},"related_object":{"type":"string","format":"uuid"},"related_category":{"type":"string","format":"uuid","nullable":true},"related_name":{"type":"string","nullable":true},"related_object_name":{"type":"string","readOnly":true},"related_object_object_name":{"type":"string","readOnly":true},"related_entity_name":{"type":"string","readOnly":true},"relation_type":{"$ref":"#/components/schemas/FieldRelationTypeEnum"},"cardinality":{"allOf":[{"$ref":"#/components/schemas/CardinalityEnum"}],"readOnly":true},"fetch_url":{"type":"string","readOnly":true},"rollup_timeline":{"type":"boolean"},"rollup_leadsources":{"type":"boolean"},"inverse_relation_rollup_timeline":{"type":"boolean"},"inverse_relation_rollup_leadsources":{"type":"boolean"},"inverse_relation_suppressed":{"type":"boolean"},"related_object_default_on_activities":{"type":"string","readOnly":true}},"required":["cardinality","fetch_url","related_category","related_entity_name","related_field","related_object","related_object_default_on_activities","related_object_name","related_object_object_name"]},"FieldRelationTypeEnum":{"enum":["one_to_one","primary","additional","primary_for","additional_for"],"type":"string","description":"* `one_to_one` - one to one\n* `primary` - primary\n* `additional` - additional\n* `primary_for` - primary for\n* `additional_for` - additional for"},"CardinalityEnum":{"enum":["one_to_one","many_to_many","many_to_one","one_to_many"],"type":"string","description":"* `one_to_one` - 1 to 1\n* `many_to_many` - Many to Many\n* `many_to_one` - Many to 1\n* `one_to_many` - 1 to Many"}}}}
```

## The AssociationSourceField object

```json
{"openapi":"3.0.3","info":{"title":"Kizen API","version":"1.0.0"},"components":{"schemas":{"AssociationSourceField":{"type":"object","description":"A serializer that accepts either an 'id' field or an alternate identifier field.\n\nThis serializer class automatically detects which identifier field is being used and\nperforms validation to ensure at least one identifier is provided. It also provides\nutility methods for retrieving objects by their identifiers.\n\nAttributes:\n    IDENTIFIER_FIELD (str): The name of the alternate identifier field. Should be\n        defined in subclasses.\n\nMethods:\n    get_identifier_field(): Determines the alternate identifier field name.\n    validate(attrs): Ensures either 'id' or the alternate identifier is provided.\n    get_identifier_values(data, values_map, queryset): Retrieves objects by their identifiers.","properties":{"id":{"type":"string","format":"uuid","nullable":true,"description":"Required if \"name\" is not provided."},"name":{"type":"string","nullable":true,"description":"Required if \"id\" is not provided."},"related_field":{"type":"string","readOnly":true},"related_object":{"type":"string","readOnly":true}},"required":["related_field","related_object"]}}}}
```

## The CustomObjectPipeline object

```json
{"openapi":"3.0.3","info":{"title":"Kizen API","version":"1.0.0"},"components":{"schemas":{"CustomObjectPipeline":{"type":"object","properties":{"stages":{"type":"array","items":{"$ref":"#/components/schemas/PipelineStage"}},"track_entity_value":{"type":"boolean"},"include_percentage_to_close":{"type":"boolean"},"use_ai_to_update_percentage":{"type":"boolean"}},"required":["stages"]},"PipelineStage":{"type":"object","properties":{"id":{"type":"string","format":"uuid"},"name":{"type":"string"},"status":{"$ref":"#/components/schemas/PipelineStageStatusEnum"},"percentage_chance_to_close":{"type":"integer","maximum":100,"minimum":0,"nullable":true},"order":{"type":"integer","maximum":32767,"minimum":0}},"required":["name","order","status"]},"PipelineStageStatusEnum":{"enum":["open","won","lost","disqualified"],"type":"string","description":"* `open` - open\n* `won` - won\n* `lost` - lost\n* `disqualified` - disqualified"}}}}
```

## The PipelineStage object

```json
{"openapi":"3.0.3","info":{"title":"Kizen API","version":"1.0.0"},"components":{"schemas":{"PipelineStage":{"type":"object","properties":{"id":{"type":"string","format":"uuid"},"name":{"type":"string"},"status":{"$ref":"#/components/schemas/PipelineStageStatusEnum"},"percentage_chance_to_close":{"type":"integer","maximum":100,"minimum":0,"nullable":true},"order":{"type":"integer","maximum":32767,"minimum":0}},"required":["name","order","status"]},"PipelineStageStatusEnum":{"enum":["open","won","lost","disqualified"],"type":"string","description":"* `open` - open\n* `won` - won\n* `lost` - lost\n* `disqualified` - disqualified"}}}}
```

## The EmbeddedRecordLayout object

```json
{"openapi":"3.0.3","info":{"title":"Kizen API","version":"1.0.0"},"components":{"schemas":{"EmbeddedRecordLayout":{"type":"object","properties":{"id":{"type":"string","format":"uuid","readOnly":true},"name":{"type":"string"},"config":{},"tabs":{},"order":{"type":"number","format":"double"}},"required":["id","name"]}}}}
```

## The CustomActionRead object

```json
{"openapi":"3.0.3","info":{"title":"Kizen API","version":"1.0.0"},"components":{"schemas":{"CustomActionRead":{"type":"object","properties":{"id":{"type":"string","format":"uuid"},"name":{"type":"string"},"description":{"type":"string"},"action":{"type":"string"},"automation":{"allOf":[{"$ref":"#/components/schemas/_CustomActionAutomation"}],"nullable":true},"smart_connector":{"allOf":[{"$ref":"#/components/schemas/_CustomActionSmartConnector"}],"nullable":true},"order":{"type":"integer"}},"required":["action","description","id","name","order"]},"_CustomActionAutomation":{"type":"object","properties":{"id":{"type":"string","format":"uuid"},"api_name":{"type":"string"},"name":{"type":"string"}},"required":["api_name","id","name"]},"_CustomActionSmartConnector":{"type":"object","properties":{"id":{"type":"string","format":"uuid"},"name":{"type":"string"}},"required":["id","name"]}}}}
```

***

## What’s Next?

After retrieving <code class="expression">space.vars.object</code> details by ID, you can:

* Query, create, or update <code class="expression">space.vars.entities</code> for the object using <code class="expression">space.vars.entities</code> APIs
* Reference field identifiers when constructing <code class="expression">space.vars.entity</code> payloads
* Use <code class="expression">space.vars.object</code> and field metadata to build schema-aware integrations
* Combine <code class="expression">space.vars.object</code> schemas with <code class="expression">space.vars.automation</code> configuration

For more information on <code class="expression">space.vars.objects</code>, check out the following topics below:

<details>

<summary>Related Topics</summary>

* [Object APIs](/docs/concepts/objects/object-apis)
* [Object API Names](/docs/concepts/objects/object-apis/object-api-names)
* [List and Search Objects API](/docs/concepts/objects/object-apis/list-and-search-objects-api)
* [Retrieve Object Field Options API](/docs/concepts/objects/custom-fields/custom-field-apis/retrieve-object-field-options-api)

</details>


# Contacts

## Overview

<code class="expression">space.vars.contacts</code> are a special kind of <code class="expression">space.vars.object</code> used to represent people that your organization interacts with. They enable structured person-level data that supports relationships, <code class="expression">space.vars.automations</code>, permissions, reporting, and API-based integrations.

While <code class="expression">space.vars.contacts</code> behave similarly to other <code class="expression">space.vars.objects</code> in many areas of the platform, they also have additional specialized system behaviors related to communication, consent, and messaging.&#x20;

### Contacts Mastery Checklist

Explore the following topics to understand how <code class="expression">space.vars.contacts</code> are defined and used in the platform.

**Core Knowledge**

* [ ] [What a Contact represents and ](/docs/concepts/objects/contacts/contacts-core-concepts#overview)
* [ ] [When to use Contacts instead of a standard Object](/docs/concepts/objects/contacts/contacts-core-concepts#key-use-cases)
* [ ] [What makes Contacts unique compared to other Objects in the platform](/docs/concepts/objects/contacts/contacts-core-concepts#what-makes-contacts-unique)
* [ ] [How Contacts fit into Kizen's overall data model and communication architecture](/docs/concepts/objects/contacts/contacts-data-model#how-these-pieces-work-together)

**Contact Features**

* [ ] [How to create and manage Contact Records](/docs/concepts/objects/records)
* [ ] [How default and custom Contact fields affect communication and behavior](/docs/concepts/objects/contacts/contacts-data-model#contact-fields)

**Configuration & Data Model**

* [ ] [How Contacts define schemas and supported fields](/docs/concepts/objects/contacts/contacts-data-model#schemas)
* [ ] [How Contact identifiers work](/docs/concepts/objects/contacts/contacts-data-model#how-contacts-are-identified) (Email vs. <code class="expression">space.vars.entity</code> name for <code class="expression">space.vars.objects</code>)
* [ ] [How Contact-specific fields such as Email Status, Tags, and Time Zone function](/docs/concepts/objects/contacts/contacts-data-model#contact-fields)

**Relationships**

* [ ] [How Contacts relate to other Contacts and Objects](/docs/concepts/objects/contacts/contacts-core-concepts#objects-vs-contacts)
* [ ] [How Contact relationships impact visibility and collaboration](/docs/concepts/objects/contacts/contacts-data-model#contact-relationships)
* [ ] [How relationship types behave consistently between Contacts and Objects](/docs/concepts/objects/contacts/contacts-data-model#how-these-pieces-work-together)

**Access & Control**

* [ ] [How permissions affect creating, viewing, and modifying Contacts](/docs/concepts/objects/contacts/contact-permissions#how-contact-permissions-work)
* [ ] [How messaging permissions differ from Standard Object permissions](/docs/concepts/objects/contacts/contact-permissions#contact-specific-permission-areas)
* [ ] [How access to Contact data impacts communication capabilities](/docs/concepts/objects/contacts/contact-permissions#identity-and-communication-field-permissions)

**Agentic Workflows**

* [ ] How Contact events trigger Agentic Workflows **(Topic Coming Soon)**
* [ ] How Contact-specific triggers (such as tag changes, email received, and website activity) behave **(Topic Coming Soon)**
* [ ] How Contact-specific actions (send email, send text) work in Agentic Workflows **(Topic Coming Soon)**

***

## What’s Next

Next, check out [Contacts Core Concepts](/docs/concepts/objects/contacts/contacts-core-concepts) where we’ll go deeper into the foundational mechanics of <code class="expression">space.vars.contacts</code>, including identifiers, required fields, email status behavior, system fields, messaging architecture, and how <code class="expression">space.vars.contacts</code> differ structurally from <code class="expression">space.vars.objects</code>.

<details>

<summary>Related Topics</summary>

* [Contacts Core Concepts](/docs/concepts/objects/contacts/contacts-core-concepts)
* [Contact Data Model](/docs/concepts/objects/contacts/contacts-data-model)
* [Contact Permissions](/docs/concepts/objects/contacts/contact-permissions)
* [Objects](/docs/concepts/objects)
* [Records](/docs/concepts/objects/records)

</details>


# Contacts Core Concepts

Learn how Contacts work in Kizen, including system behavior, identity rules, communication features, relationships, and when to use Contacts instead of custom objects to model people

{% hint style="success" %}
**Audience:** Admins, Developers, Solution Architects

**Purpose:** Explains what Contacts are, how they behave differently from Objects, and when to use Contacts to model people, communication, and identity across the platform.
{% endhint %}

## Overview

Contacts represent people in the platform’s data model.

While Contacts share the same structural foundation as <code class="expression">space.vars.objects</code> such as Fields, <code class="expression">space.vars.entities</code>, relationships, permissions, APIs, they introduce system-level behavior designed specifically for person-based identity, communication, consent, and compliance.

Use Contacts when you need to:

* Represent real individuals
* Send or manage email and SMS communication
* Enforce consent and deliverability rules
* Reference people externally using person-level identifiers

Contacts are a specialized system <code class="expression">space.vars.object</code> with additional guarantees and constraints that ensure safe, consistent handling of people and messaging across the platform.

### What Makes Contacts Unique

Contacts behave differently from standard or workflow <code class="expression">space.vars.objects</code> in several important ways:

* **Identity-based:** Contacts use email (if available) as a unique identifier
* **Communication-aware:** Contacts participate in email and SMS workflows
* **Consent-enforcing:** Messaging behavior is governed by system rules
* **De-duplicated:** The platform prevents multiple Contacts from sharing the same email
* **Ownerless:** Contacts do not have an Owner field; access is association-driven

These behaviors are enforced at the system level and cannot be replicated by modeling people as custom <code class="expression">space.vars.objects</code>.

### Why Contacts Matter

Using Contacts instead of <code class="expression">space.vars.objects</code> ensures:

* Accurate identity resolution across imports and integrations
* Safe messaging and subscription enforcement
* Reliable <code class="expression">space.vars.automation</code> triggers tied to communication events
* Clean reporting and timelines tied to real individuals
* Compliance with deliverability and consent requirements

Modeling people as standard <code class="expression">space.vars.objects</code> may appear simpler initially, but it removes access to these system guarantees and often introduces long-term risk, duplication, or compliance issues.

***

## Contact Features

Contacts support all core platform capabilities—fields, relationships, permissions, <code class="expression">space.vars.automations</code>, APIs—plus additional features designed specifically for people.

### Contact Record

A Contact <code class="expression">space.vars.entity</code> represents a single real person.

Each Contact <code class="expression">space.vars.entity</code>:

* Stores person-level field values
* Can be related to other Contacts and <code class="expression">space.vars.objects</code>
* Can participate in messaging and <code class="expression">space.vars.automations</code>
* Appears across timelines, reports, dashboards, and APIs

Contacts are first-class <code class="expression">space.vars.entities</code> in the data model, not secondary profiles.

### Contact Custom Fields

Contacts support the same custom field system as standard <code class="expression">space.vars.objects</code>, allowing each organization to model people according to their needs.

In addition to standard field types, Contacts include system-managed fields with specialized behavior:

* **Email** (unique identifier)
* **First Name**
* **Last Name**
* **Titles**
* **Email Status** (consent and deliverability)
* **Tags** (with built-in tag management)
* **Home Phone**
* **Mobile Phone** (used for SMS)
* **Business Phone**
* **Time Zone** (used for time-aware messaging)

These fields directly influence messaging, <code class="expression">space.vars.automations</code>, and compliance behavior.

### Where Contacts Appear

Contacts surface throughout the platform wherever people are relevant, including:

* Relationship fields on other <code class="expression">space.vars.entities</code>
* Timelines and activity feeds
* <code class="expression">space.vars.automations</code> and triggers
* Messaging workflows (email and SMS)
* Reports and dashboards
* API responses and lookups

Contacts, like other Custom <code class="expression">space.vars.objects</code>, can appear across many <code class="expression">space.vars.entities</code> and workflows simultaneously without duplication.

***

## Objects vs Contacts

Contacts and Objects share the same architectural foundation but serve different purposes.

| Aspect                                                                                                                    | Contacts                                                                     | Custom Objects                                         |
| ------------------------------------------------------------------------------------------------------------------------- | ---------------------------------------------------------------------------- | ------------------------------------------------------ |
| Always present regardless of permissions                                                                                  | No                                                                           | No                                                     |
| Accessible via <code class="expression">space.vars.objects</code>/ <code class="expression">space.vars.entity</code> APIs | No                                                                           | Yes                                                    |
| Supports <code class="expression">space.vars.fields</code>                                                                | Yes                                                                          | Yes                                                    |
| Can relate to other <code class="expression">space.vars.objects</code>                                                    | Yes                                                                          | Yes                                                    |
| Schema flexibility                                                                                                        | Limited (<code class="expression">space.vars.workflows</code> not available) | Fully configurable                                     |
| Optimized for Communication, Email & SMS                                                                                  | Yes                                                                          | No                                                     |
| Unique Identifier                                                                                                         | Email                                                                        | <code class="expression">space.vars.entity</code> Name |

{% hint style="info" %}
**Note**: If you are modeling people, use Contacts. If you are modeling things, processes, or business entities, use <code class="expression">space.vars.objects</code>.
{% endhint %}

For a deeper explanation of <code class="expression">space.vars.object</code> structure and lifecycle, see [Objects Core Concepts](/docs/concepts/objects/object-core-concepts).

***

## Key Use Cases

If the record must be addressable as a person, it should be a Contact. Use Contacts when you need to:

* Send emails or SMS messages
* Track communication history with individuals
* Manage consent and opt-in status
* Identify people consistently across systems
* Associate people with multiple records (accounts, policies, cases, etc.)
* Model households, teams, or networks of individuals
* Trigger <code class="expression">space.vars.automations</code> based on person-level behavior

Below are industry examples of how to use Contacts.

### Industry Examples

{% tabs %}
{% tab title="Insurance" %}

### Modeling People Across Policies and Claims

Insurance teams use **Contacts** to represent the people involved in coverage and service delivery, while Policies, Claims, Applications, and Renewals remain <code class="expression">space.vars.objects</code>. Contacts make it possible to reliably identify individuals, communicate with them, and connect them to multiple policies and lifecycle events.

Examples include:

* Creating a **Policyholder Contact** to store person-specific information such as name, email, phone, preferred communication method, and time zone
* Creating a **Beneficiary Contact** and relating them to one or more Policy <code class="expression">space.vars.entities</code>
* Creating a **Claimant Contact** and relating them to Claim <code class="expression">space.vars.entities</code> for claim intake and updates
* Creating a **Broker/Agent Contact** and relating them to Accounts, Policies, and Applications to support servicing workflows
* Using **Email Status** to enforce opt-in/opt-out behavior before sending renewal notices or claim updates

How Contacts Help:

* Establish a consistent, de-duplicated identity layer (email-based when present) for policyholders, beneficiaries, claimants, and brokers
* Enable relationships between people and operational <code class="expression">space.vars.entities</code> (Policy ↔ Contact, Claim ↔ Contact, Application ↔ Contact)
* Support compliant communication workflows by enforcing Email Status and suppression behavior
* Improve <code class="expression">space.vars.automation</code> reliability (for example, trigger renewals or claim updates using Contact identity + relationship context)
* Reduce duplication risk during imports and integrations by using Contacts as the canonical person <code class="expression">space.vars.entity</code>
  {% endtab %}

{% tab title="Healthcare" %}

### Modeling Patients, Caregivers, and Providers

Healthcare teams use **Contacts** to represent individuals who participate in care and communication—patients, caregivers, emergency contacts, and providers—while clinical, operational, and service workflows remain <code class="expression">space.vars.objects</code> (appointments, cases, referrals, authorizations, care plans).

Examples include:

* Creating a **Patient Contact** to store name, email, mobile phone, time zone, preferred language, and other person-level attributes
* Creating a **Caregiver Contact** and relating them to the Patient Contact and to care-related <code class="expression">space.vars.entities</code> (cases, care plans)
* Creating an **Emergency Contact** and relating them to a Patient Contact for operational readiness
* Using **Mobile Phone** and Contact messaging rules for SMS reminders (when texting is enabled)
* Using **Email Status** to prevent messaging when consent is not present or deliverability is suppressed

How Contacts Help:

* Provide a person-level identity layer that can be referenced across many care workflows without duplicating people
* Enable relationship-driven collaboration (Contacts don’t have Owners; visibility is modeled through relationships + permissions)
* Support communication workflows like appointment reminders, care updates, and patient outreach
* Enforce consent and deliverability rules through Email Status and suppression behavior
  {% endtab %}

{% tab title="Financial Services" %}

### Modeling Clients, Advisors, and Beneficiaries

Financial services teams use **Contacts** to represent people who hold financial relationships—clients, advisors, beneficiaries, authorized representatives—while accounts, products, applications, and service workflows remain <code class="expression">space.vars.objects</code>.

Examples include:

* Creating a **Client Contact** to store name, email, phone, time zone, and communication preferences
* Creating an **Advisor Contact** and relating them to one or many Client and Account <code class="expression">space.vars.entities</code>
* Creating a **Beneficiary Contact** and relating them to financial products or account structures
* Creating an **Authorized Representative Contact** and relating them to client <code class="expression">space.vars.entities</code> for service and compliance workflows
* Using **Email Status** to enforce subscription and deliverability rules for statements, notices, and outreach

How Contacts Help:

* Establish a consistent people layer across accounts, products, and servicing workflows
* Support complex real-world structures (households, trusts, joint relationships) through many-to-many relationships
* Improve integration reliability by using Contact identity (email-based when present) for lookup and upsert behavior
* Support compliant communication by enforcing Email Status and suppression behavior across all related <code class="expression">space.vars.entities</code>
* Enable better operational visibility by tying timelines, messaging history, and automations to the Contact <code class="expression">space.vars.entity</code>
  {% endtab %}
  {% endtabs %}

***

## What’s Next

To continue learning about Contacts, review [Contacts Data Model](/docs/concepts/objects/contacts/contacts-data-model) to understand identifiers, schema, and system rules.

<details>

<summary>Related Content</summary>

* [Contacts](/docs/concepts/objects/contacts)
* [Contacts Data Model](/docs/concepts/objects/contacts/contacts-data-model)
* [Contact Permissions ](/docs/concepts/objects/contacts/contact-permissions)
* [Objects](/docs/concepts/objects)
* [Records](/docs/concepts/objects/records)
* [Custom Fields](broken://pages/6rrJeEIzfjMAZY62pfmc)

</details>


# Contacts Data Model

Learn about the Contacts data model, including identifiers, fields, schemas, associations, rules, APIs, and how Contacts connect to other objects across the platform.

{% hint style="success" %}
**Audience:** Admins, Developers, Solution Architects

**Purpose:** Explains how the Contacts data model works so you can confidently design schemas, integrations, <code class="expression">space.vars.automations</code>, and permissions that correctly model people and communication behavior across the platform.
{% endhint %}

## Overview

Contact <code class="expression">space.vars.objects</code> are a special kind of <code class="expression">space.vars.object</code> used when you want to represent people within the platform’s data model. While Contacts share many structural characteristics with standard <code class="expression">space.vars.objects</code> (fields, associations, permissions, APIs), they also introduce system-level behaviors specific to communication, consent, and messaging.

The Contacts data model exists to support:

* Person-level identity and de-duplication
* Communication workflows (email and SMS)
* Consent and compliance logic
* Relationship modeling between people and other <code class="expression">space.vars.entities</code>
* API and <code class="expression">space.vars.automation</code> behaviors that depend on person-specific rules

Understanding the Contacts data model is critical for building reliable integrations, designing scalable schemas, and avoiding unintended communication or compliance issues.

### How Contacts Are Identified

Contacts use a different identification model than standard <code class="expression">space.vars.objects</code>. This differs from standard <code class="expression">space.vars.objects</code>, where the <code class="expression">space.vars.entity</code> name is the primary identifier.

* **Primary Identifier is different:** The email address functions as the unique identifier for Contacts across the platform.
  * Two Contacts cannot share the same email address
* **Email is not required:** The email address is not required to create a Contact, but:
  * At least one of the following must be present to create a contact: first name, last name, email, or mobile phone
  * Contacts created without email are more likely to produce duplicates during imports and integrations
  * Many Contact features such as emailing, subscription management, identification via API rely on having an email address
* **Email is editable:** The email address can be edited even though it is a unique identifier. It works similar to renaming a <code class="expression">space.vars.entity</code> name on an <code class="expression">space.vars.object</code>.

***

## How Contacts Are Used

Use Contacts to model individual people within the data model.

Contacts support person-specific capabilities that are not available on standard <code class="expression">space.vars.objects</code>, including communication workflows, consent management, and identity-based behaviors. Contacts are appropriate when <code class="expression">space.vars.entities</code> must be addressable by email, participate in messaging, trigger communication-based <code class="expression">space.vars.automations</code>, or be referenced externally via APIs using person-level identifiers.

Modeling people as custom <code class="expression">space.vars.objects</code> instead of Contacts removes access to system features such as email and SMS delivery, subscription management, email status enforcement, Contact-specific <code class="expression">space.vars.automation</code> triggers, and message history.

#### Practical Modeling Examples

<table><thead><tr><th width="286.421875">Scenario</th><th width="144.8203125">Use Contacts?</th><th>Why</th></tr></thead><tbody><tr><td>Applicants</td><td>Yes</td><td>Applicants often need email communication, reminders, consent tracking, and follow-up <code class="expression">space.vars.automations</code>.</td></tr><tr><td>Policyholders</td><td>Yes</td><td>Policyholders require communication, identity matching, and history across multiple policies.</td></tr><tr><td>Internal Roles (e.g., Underwriter role on a policy)</td><td>No</td><td>Represents a role or function, not a person you communicate with externally.</td></tr><tr><td>System-only entities (e.g., Scoring Profile, Risk Persona)</td><td>No</td><td>These represent data structures, not real people.</td></tr></tbody></table>

***

## Data Structure

Contacts follow the same foundational data structure as standard <code class="expression">space.vars.objects</code>. Every Contact is composed of the same three core elements: fields, <code class="expression">space.vars.entities</code>, and relationships. Together, these define both the structure of Contact data and how that data behaves across the system.

<div data-with-frame="true"><figure><img src="/files/kllLWkUgRfA8ew99o8JD" alt="" width="563"><figcaption></figcaption></figure></div>

### Contact Fields

Contact fields define the schema of the Contact <code class="expression">space.vars.object</code>. They determine what data can be stored on Contact <code class="expression">space.vars.entities</code> and how that data is validated and used across the platform.

Contact Fields specify:

* The type of data (text, number, date, select, relationship, etc.)
* Whether the data is required, read-only, or conditional
* How the data participates in <code class="expression">space.vars.automations</code>, reporting, messaging, and integrations

Fields belong to the Contact <code class="expression">space.vars.object</code>, not to individual <code class="expression">space.vars.entities</code>. Like standard <code class="expression">space.vars.objects</code>, Contacts rely on flexible, business-defined schemas rather than fixed predefined structures.

In addition to supporting all standard custom field types, Contacts also include system-managed fields that introduce specialized behavior, such as:

* Email (unique identifier)
* Email Status (consent and deliverability logic)
* Tags (with tag manager behavior)
* Messaging-related fields
* Time zone

These fields affect not only validation but also how Contacts behave in communication workflows.

For more information, see [Custom Fields](/docs/concepts/objects/custom-fields).

### Records

Contact <code class="expression">space.vars.entities</code> are the actual instances of data created using the Contact schema.

Each Contact <code class="expression">space.vars.entity</code>:

* Stores field values
* Represents a real person
* Can be related to other Contacts and other <code class="expression">space.vars.objects</code>
* Can participate in messaging, <code class="expression">space.vars.automations</code>, APIs, and permissions

While the Contact <code class="expression">space.vars.object</code> defines structure and fields define validation rules, Contact <code class="expression">space.vars.entities</code> contain the actual stored data.

Schema changes affect how future updates are validated but do not retroactively modify existing Contact data unless explicitly written by an <code class="expression">space.vars.automation</code>, integration, or user action.

For more information, see [Records](/docs/concepts/objects/records).

### Relationships

Contacts use the same relationship model as standard <code class="expression">space.vars.objects</code>.

Relationships define how Contact <code class="expression">space.vars.entities</code> connect to:

* Other Contacts
* <code class="expression">space.vars.entities</code> in other <code class="expression">space.vars.objects</code>

They are implemented as a specialized field type and always connect <code class="expression">space.vars.entity</code> to <code class="expression">space.vars.entity</code>, not <code class="expression">space.vars.object</code> to <code class="expression">space.vars.object</code>.

Relationships enable:

* Linking people to accounts, cases, applications, or other business data
* Cross-<code class="expression">space.vars.entity</code> <code class="expression">space.vars.automation</code> behavior
* Reporting across connected <code class="expression">space.vars.entities</code>
* Collaboration without relying on ownership

A relationship is defined at the <code class="expression">space.vars.object</code> level as a field, but its value is stored on individual Contact <code class="expression">space.vars.entities</code> as a reference to another <code class="expression">space.vars.entity</code>.

When a relationship field is created, an inverse relationship field is automatically created on the related <code class="expression">space.vars.object</code>. Updates are reflected on both sides, enabling bi-directional navigation between related <code class="expression">space.vars.entities</code>.

Contacts intentionally do not support an Owner field. Visibility and collaboration are managed through relationships and permissions rather than ownership.

For more information, see [Object Relationships](/docs/concepts/objects/object-configuration/object-relationships).

### How These Pieces Work Together

Contacts follow the same structural model as standard <code class="expression">space.vars.objects</code>:

* <code class="expression">space.vars.objects</code> define schema
* Fields and relationships define structure and rules
* <code class="expression">space.vars.entities</code> store actual values that conform to that schema

The difference is not in structure, but in behavior. Contacts introduce additional system-level logic on top of this shared model to support communication, identity, consent, and compliance.

This allows Contacts to remain fully compatible with the platform’s data model, APIs, <code class="expression">space.vars.automations</code>, and integrations while safely supporting person-specific workflows.

***

## Schemas

Contacts use the same schema model as standard <code class="expression">space.vars.objects</code>. They support the same combination of system fields, default fields, and admin-defined custom fields. This schema determines what data can exist on a Contact, how that data behaves across the platform, what information is available to <code class="expression">space.vars.automations</code> and APIs, and which fields appear throughout the UI and integrations.&#x20;

For a detailed explanation of how these schemas are defined and managed, see the [Schema](/docs/concepts/objects/object-data-model#schemas) section of the [Objects Data Model](/docs/concepts/objects/object-data-model) topic.

***

### Contact Relationships

Contacts use the same relationship system as standard <code class="expression">space.vars.objects</code>, which means they can be connected to other <code class="expression">space.vars.entities</code> in meaningful, structured ways rather than existing in isolation.

Contacts can be related to:

* Other Contacts (for example, spouses, coworkers, household members)
* <code class="expression">space.vars.entities</code> in other <code class="expression">space.vars.objects</code> (such as Accounts, Policies, Tickets, Applications, or Projects)

These relationships are not just visual links. They directly influence:

* What data users can see
* How <code class="expression">space.vars.entities</code> appear in timelines and dashboards
* How <code class="expression">space.vars.automations</code> behave across connected <code class="expression">space.vars.entities</code>
* How reporting works across related data

Because Contacts do not have an Owner field, relationships and permissions are the primary mechanisms for collaboration and visibility. Instead of assigning a person to a single owner, organizations model real-world structure through associations.

This makes it possible to model patterns like:

* A household with multiple related Contacts
* A single Contact linked to multiple Accounts or Policies
* A Contact holding multiple roles across different <code class="expression">space.vars.entities</code>
* Complex many-to-many relationships between people and business data

In practice, this means Contacts behave like first-class <code class="expression">space.vars.entities</code> in your data model, fully connected to the rest of your system rather than siloed as standalone profiles.

For more information on Relationships and Associations, see [Object Relationships](/docs/concepts/objects/object-configuration/object-relationships).

***

## Contact Fields

Contacts support the same field model as standard <code class="expression">space.vars.objects</code>, including system fields, default fields, and custom fields.

For general field behavior, creation, and configuration, see [Custom Fields](/docs/concepts/objects/custom-fields). This section focuses only on fields that have Contact-specific behavior.

### Contact-Specific Fields

Some fields on Contacts introduce platform behavior that does not exist on standard <code class="expression">space.vars.objects</code>:

* **First Name:** Used for personalization in communications, greetings, and templates. This field supports dynamic merge values and improves readability across the UI and reporting.
* **Last Name:** Used alongside First Name to identify Contacts in the UI, search results, and reporting. This field is commonly required for communication workflows and external integrations.
* **Titles:** Stores a Contact’s role or job title. This field is informational and commonly used for segmentation, reporting, and personalization in communications.
* **Email:** Acts as the unique identifier for Contacts. Two Contacts cannot share the same email address. This affects imports, API lookups, de-duplication, and communication behavior.
* **Email Status:** Controls consent and deliverability. Values such as *Not Opted In, Opted In, Unsubscribed,* and *Suppressed* directly affect whether a Contact can receive email. Suppressed status cannot be manually overridden.
* **Tags:** Contacts include a system-promoted Tags field with a built-in Tag Manager. Tags can also trigger Contact-specific <code class="expression">space.vars.automation</code> behavior.
* **Home Phone:** Stores a personal phone number for reference or reporting. This field does not drive messaging or <code class="expression">space.vars.automation</code> behavior.
* **Business Phone:** Stores a work phone number for reference or reporting. This field is informational and does not support SMS delivery.
* **Mobile Phone:** Used specifically for SMS messaging when texting is enabled. Other phone fields are informational only.
* **Time Zone:** Stores a Contact’s time zone for use in time-aware messaging and scheduling behavior.

These fields do not just store data. They actively influence messaging, <code class="expression">space.vars.automations</code>, compliance, and system behavior for Contacts.

***

## Contact Rules

Contacts enforce several system-level rules that do not apply to standard <code class="expression">space.vars.objects</code>. These rules exist to support identity management, communication, and compliance.

#### System-Enforced Constraints

| Rule                                 | What It Means                                                                                                                               | Why It Matters                                                                                                         |
| ------------------------------------ | ------------------------------------------------------------------------------------------------------------------------------------------- | ---------------------------------------------------------------------------------------------------------------------- |
| **Email must be unique**             | Two Contacts cannot share the same email address.                                                                                           | Email functions as the Contact’s unique identifier for imports, APIs, de-duplication, and communication workflows.     |
| **Suppressed email is irreversible** | Once an email is marked as *Suppressed* (e.g., due to spam complaints or repeated bounces), it cannot be re-enabled for that email address. | Prevents accidental violations of deliverability and compliance rules. This is a permanent state for that email value. |
| **Restricted system fields**         | Certain system-managed fields (such as Email Status) cannot always be edited and may be locked by platform logic.                           | Ensures that consent, deliverability, and communication behavior cannot be bypassed manually.                          |
| **Communication-gated permissions**  | Specific permissions control who can send email, send SMS, or manage subscriptions.                                                         | Protects against unauthorized messaging and enforces operational governance.                                           |
| **Fixed API identity**               | The Contacts <code class="expression">space.vars.object</code> API name cannot be changed, even via API.                                    | Ensures consistent identity behavior across integrations and prevents breaking communication logic.                    |

{% hint style="warning" %}
**Caution:** Some Contact behaviors are intentionally irreversible. Most notably, when an email address enters a suppressed state, it cannot be manually re-enabled for that email value. This protects system integrity, deliverability, and compliance.
{% endhint %}

For details on how permissions control access and messaging behavior, see [Contact Permissions](/docs/concepts/objects/contacts/contact-permissions).

***

## Additional Information

<details>

<summary>Supported APIs</summary>

#### Supported APIs

Contacts use the same API patterns as standard <code class="expression">space.vars.object</code>. For API information on Standard <code class="expression">space.vars.objects</code>, see the [Object APIs](/docs/concepts/objects/object-apis) topic.

</details>

<details>

<summary>Error States</summary>

#### Error States

Common Contact-specific error conditions include:

* Attempting to create a <code class="expression">space.vars.contact</code> with an email that already exists
* Import failures caused by missing identifiers
* Messaging failures due to suppressed or unsubscribed status
* API lookup failures when identifier does not resolve
* Permission-based errors when accessing messaging features

These errors are not simply validation issues; many are caused by <code class="expression">space.vars.contact</code>-specific system rules.

</details>

***

## What’s Next

Next, review [Custom Fields](/docs/concepts/objects/custom-fields) to understand how individual field types, system fields, and custom fields can affect Contact behavior across the platform.

<details>

<summary>Related Topics</summary>

* [Contacts](/docs/concepts/objects/contacts)
* [Contacts Core Concepts](/docs/concepts/objects/contacts/contacts-core-concepts)
* [Contact Permissions](/docs/concepts/objects/contacts/contact-permissions)
* [Objects](/docs/concepts/objects)
* [Records](/docs/concepts/objects/records)
* [Custom Fields](/docs/concepts/objects/custom-fields)

</details>


# Contact Permissions

Learn how Contact permissions work in Kizen, including how they align with Object permissions and which actions are unique to Contacts.

{% hint style="success" %}
**Audience:** Admins, Developers, Solution Architects

**Purpose:** Explains how <code class="expression">space.vars.contact</code> permissions work in <code class="expression">space.vars.Kizen\_company\_name</code>, how they align with <code class="expression">space.vars.object</code> permissions, and how they control access to creating, editing, viewing, and performing bulk actions on <code class="expression">space.vars.contact</code> <code class="expression">space.vars.entities</code>.
{% endhint %}

## Overview

<code class="expression">space.vars.contacts</code> are a special type of <code class="expression">space.vars.object</code> used to represent people in the platform. <code class="expression">space.vars.contact</code> permissions determine:

* Whether a user can see <code class="expression">space.vars.contacts</code> across the platform
* Whether a user can create, edit, archive, or export <code class="expression">space.vars.contact</code> <code class="expression">space.vars.entities</code>
* Whether a user can perform single or bulk actions on <code class="expression">space.vars.contacts</code>
* How <code class="expression">space.vars.contact</code> access is enforced across the UI, APIs, <code class="expression">space.vars.automations</code>, integrations, and exports

### How Contact Permissions Work

<code class="expression">space.vars.contact</code> permissions follow the same two-level permission model as other <code class="expression">space.vars.objects</code>, with additional system-level behavior specific to people, communication, and identity.

Permissions are configured through Teams, Roles, and Permission Groups and govern <code class="expression">space.vars.contact</code> visibility, record access, and actions such as creating, editing, archiving, uploading, and exporting. In addition, <code class="expression">space.vars.contacts</code> include <code class="expression">space.vars.contact</code> field permissions, which control whether users can edit <code class="expression">space.vars.contact</code>-specific fields and settings that do not apply to <code class="expression">space.vars.objects</code>.

For full details and examples, see [Object Permissions.](/docs/concepts/objects/object-configuration/object-permissions)

***

## Contact-Specific Permission Areas

<code class="expression">space.vars.contacts</code> represent people, so their permissions include additional controls for communication, subscriptions, and identity-related actions.

### Accessing Contact Permission Settings

{% stepper %}
{% step %}

#### Go to Contacts and select **Object Settings** from gear icon

<div data-with-frame="true"><figure><img src="/files/ZnGk7SEp1fekOkDqze6c" alt="" width="223"><figcaption></figcaption></figure></div>
{% endstep %}

{% step %}

#### Select the Permissions tab (Step 5 in Object Configuration)

<div data-with-frame="true"><figure><img src="/files/aWf9NGsB1nTueYRMCkMe" alt="" width="563"><figcaption></figcaption></figure></div>
{% endstep %}
{% endstepper %}

The Permissions step contains all available <code class="expression">space.vars.contact</code> permission settings.

<div data-with-frame="true"><figure><img src="/files/WVtIArq5eQT8gaVPI0n0" alt="" width="563"><figcaption></figcaption></figure></div>

All permissions discussed below can be located from this page.

### Single-Record Contact Actions

<code class="expression">space.vars.contacts</code> include permissions that allow users to perform communication and interaction actions on individual <code class="expression">space.vars.contact</code> <code class="expression">space.vars.entities</code>.

<div data-with-frame="true"><figure><img src="/files/8Cb4GxRIHcZQS5qB212V" alt="" width="563"><figcaption></figcaption></figure></div>

Under **Perform Single Record Actions**, <code class="expression">space.vars.contact</code>-specific permissions include:

* **Send Single Message:** Allows sending an email or text message from an individual <code class="expression">space.vars.contact</code> <code class="expression">space.vars.entity</code>
* **Modify Agentic Workflow:** Allows starting, pausing, or cancelling <code class="expression">space.vars.automations</code> from the <code class="expression">space.vars.contact</code> context
* **Team Associations:** Controls access to employee-based associations for <code class="expression">space.vars.contacts</code>
* **Subscription Lists:** Allows viewing and managing a <code class="expression">space.vars.contact</code>’s email subscription status, including opt-in and unsubscribe state
* **View Timeline:** Allows viewing message history and interaction activity for a <code class="expression">space.vars.contact</code>

These actions do not exist for standard <code class="expression">space.vars.objects</code> because they depend on a Contact’s identity and system-managed communication status.

Having permission to edit a <code class="expression">space.vars.contact</code> <code class="expression">space.vars.entity</code> does not guarantee that communication actions are available. Actions may still be restricted based on system-managed <code class="expression">space.vars.contact</code> state, such as email status, suppression, or integration configuration.

### Contact-Specific Bulk Actions

<code class="expression">space.vars.contacts</code> also introduce bulk permissions for communication and subscription workflows that are not available on other <code class="expression">space.vars.objects</code>. These permissions control whether users can perform communication or subscription-related actions across multiple <code class="expression">space.vars.contact</code> <code class="expression">space.vars.entities</code> at once.

<div data-with-frame="true"><figure><img src="/files/TLuNeK5KSYQH8SETQRJM" alt="" width="563"><figcaption></figcaption></figure></div>

Under **Perform Bulk Actions**, <code class="expression">space.vars.contact</code>-only permissions include:

* **Send Email:** Allows users to send emails to one or more <code class="expression">space.vars.contacts</code>, subject to email status, suppression rules, and permission checks
* **Send Text:** Allows users to send text messages to one or more <code class="expression">space.vars.contacts</code> when SMS is configured and the <code class="expression">space.vars.contact</code> has a valid mobile number
* **Send Survey:** Allows users to send surveys to <code class="expression">space.vars.contacts</code> as part of bulk communication workflows
* **Change Tags:** Allows users to add or remove tags on one or more <code class="expression">space.vars.contact</code> <code class="expression">space.vars.entities</code> for categorization and segmentation
* **Manage Subscription:** Allows users to view and update <code class="expression">space.vars.contact</code> email subscription status, subject to system-managed compliance rules

Unlike generic bulk actions (such as changing field values or exporting <code class="expression">space.vars.entities</code>), these actions are explicitly tied to <code class="expression">space.vars.contacts</code> and reflect workflows that apply only to people.

Bulk communication actions are still subject to:

* <code class="expression">space.vars.entity</code>-level permissions
* Field-level access
* System-managed <code class="expression">space.vars.contact</code> state (such as opt-in status or suppression)

### Identity and Communication Field Permissions

<code class="expression">space.vars.contacts</code> expose field-level permissions that directly affect identity and contactability.

<div data-with-frame="true"><figure><img src="/files/wHZBtUBKkjc8WANKbtl1" alt="" width="563"><figcaption></figcaption></figure></div>

When you scroll down further on the page, under **Individual Contact Field Permission (Set All)**, permission controls include:

* **Email:** The primary identifier for a <code class="expression">space.vars.contact</code>, used to determine email contactability and enable email-based communication and <code class="expression">space.vars.automations</code>
* **Email Status:** A system-managed field that reflects a <code class="expression">space.vars.contact</code>’s email opt-in and deliverability state and may block email sending regardless of user permissions
* **Mobile Phone:** Determines SMS contactability and enables text messaging and SMS-based <code class="expression">space.vars.automations</code> when configured
* **Tags:** A <code class="expression">space.vars.contact</code>-specific, dynamic field used for categorization, segmentation, and triggering <code class="expression">space.vars.automations</code> and bulk actions
* **Timezone:** Stores a <code class="expression">space.vars.contact</code>'s local time zone and may be used to schedule or personalize communication timing
* **Birthday:** A date field used for personalization and date-based <code class="expression">space.vars.automations</code> and segmentation

These fields differ from typical <code class="expression">space.vars.object</code> fields because they:

* Determine whether communication actions are allowed
* Are referenced by campaigns and <code class="expression">space.vars.automations</code>
* May be partially system-managed (for example, Email Status)

***

## Contact Permissions in API Responses

Permissions for <code class="expression">space.vars.contacts</code> are surfaced directly in API responses, just like other <code class="expression">space.vars.objects</code>. For more information, see [Object Permissions](/docs/concepts/objects/object-configuration/object-permissions).

{% hint style="warning" %}
**Caution**: <code class="expression">space.vars.contact</code> API responses indicate whether the current user can access, edit, create, or perform bulk actions on <code class="expression">space.vars.contact</code> <code class="expression">space.vars.entities</code>. <code class="expression">space.vars.contact</code>-specific communication actions may still be restricted by system-managed <code class="expression">space.vars.contact</code> state (such as email status or suppression), even when these permissions are present.
{% endhint %}

***

## Important Considerations

When working with <code class="expression">space.vars.contact</code> permissions, keep the following in mind:

* Contacts follow the same permission model as <code class="expression">space.vars.objects</code>, but support additional system behavior
* Platform-level <code class="expression">space.vars.contact</code> access does not imply <code class="expression">space.vars.entity</code>-level access
* Missing <code class="expression">space.vars.contact</code> <code class="expression">space.vars.entities</code> or fields often indicate permission restrictions, not missing data
* Bulk <code class="expression">space.vars.contact</code> actions are subject to the same <code class="expression">space.vars.entity</code>-level permission checks
* Permission misconfiguration is a common source of <code class="expression">space.vars.contact</code>-related issues in both UI and API workflows

***

## What’s Next

From here, you may want to explore other topics related to <code class="expression">space.vars.contact</code> Permissions below:

<details>

<summary>Related Topics</summary>

* [Permissions](/docs/settings-and-administration/permissions)
* [Object Permissions](/docs/concepts/objects/object-configuration/object-permissions)
* [Contacts](/docs/concepts/objects/contacts)
* [Custom Fields](broken://pages/6rrJeEIzfjMAZY62pfmc)

</details>


# Custom Fields

Learn how field types, metadata, and platform limits impact schema design, automation, reporting, and integrations in Kizen.

## Overview

<code class="expression">space.vars.fields</code> extend an <code class="expression">space.vars.object</code>’s schema by allowing administrators to capture structured data beyond the platform’s default fields. Each <code class="expression">space.vars.field</code> represents a defined attribute on a <code class="expression">space.vars.entity</code> and directly influences how data is stored, validated, automated, reported on, secured, and accessed through APIs.

Selecting the correct field type is a foundational schema decision with downstream impacts across the platform.

Field configuration affects:

* **Data consistency:** Structured fields enable reliable filtering, segmentation, and analytics.
* **Agentic Workflow behavior:** Field values frequently act as triggers, conditions, and update targets.
* **Reporting capabilities:** Field types determine whether data can be grouped, aggregated, or used as metrics.
* **Permissions:** Field-level access controls visibility and edit rights.
* **API integrations:** Field API names and metadata define how external systems read and write data.

<code class="expression">space.vars.fields</code> share the same underlying architecture as standard fields and behave consistently across <code class="expression">space.vars.objects</code>, activities, forms, automations, and integrations.

{% hint style="info" %}
**Note:** Field types cannot be converted after creation. Changing a field type typically requires creating a new field and migrating data, which may impact automations, reports, and integrations.
{% endhint %}

Before designing or modifying an <code class="expression">space.vars.object</code> schema, review available field types, platform limits, and specialized behaviors to ensure long-term scalability.

***

## Custom Field Type Reference

The following table provides a high-level comparison of supported field types to guide schema planning decisions.

<table><thead><tr><th width="219.9453125">Field Type</th><th width="228.86328125">Limits</th><th>Special Features / Notes</th></tr></thead><tbody><tr><td><a href="/pages/udk276nkC0yUhCcx8GqY#checkbox">Checkbox</a></td><td>Boolean value. You can only select 1</td><td>Stores a <code>true</code> value or null if nothing is selected. Unchecked values are stored as <code>null</code>. <code>null==false</code>. Useful for binary states.</td></tr><tr><td><a href="/pages/CUl0W9I7Sxjm22ZvzM4p#checkboxes">Checkboxes</a> </td><td>Up to 250 selectable options</td><td>Allows multiple predefined values. Renders as checkboxes or collapses into a dropdown when option counts grow beyond 4.</td></tr><tr><td><a href="/pages/lg7O68BVQcNPyvw02eYk#money-currency-price">Currency / Price</a></td><td>Up to 4 decimal places</td><td>Displays a currency symbol without automatic conversion. Supports negative values and is a number + currency symbol.</td></tr><tr><td><a href="/pages/VnqsEXt04PYURF8zJ6sO#date">Date</a></td><td>Stores calendar date only</td><td>No time component. Evaluated relative to the business timezone for comparisons and <code class="expression">space.vars.automation</code> logic.</td></tr><tr><td><a href="/pages/VnqsEXt04PYURF8zJ6sO#datetime">Date &#x26; Time</a></td><td>Timezone-aware timestamp</td><td>Entered in the user’s timezone and normalized for consistent reporting. Dashboards typically filter using the business timezone.</td></tr><tr><td><a href="/pages/CUl0W9I7Sxjm22ZvzM4p#dropdown-single-select">Dropdown (Single-Select)</a></td><td>Up to 250 options</td><td>Allows selection of one predefined value. Supports predictable filtering, reporting, and <code class="expression">space.vars.automation</code> logic. Recommended when data must remain standardized.</td></tr><tr><td><a href="/pages/CUl0W9I7Sxjm22ZvzM4p#dropdown-multi-select">Dropdown (Multi-Select)</a></td><td>Up to 250 options</td><td>Allows selection of multiple predefined values. Useful for categorical data where more than one value may apply. May require additional consideration in reporting and automation due to multiple stored values.</td></tr><tr><td><a href="/pages/CUl0W9I7Sxjm22ZvzM4p#dynamic-tags">Dynamic Tags</a></td><td>No practical option limit (performance optimized)</td><td>Users can create values at runtime. Behaves similarly to a lightweight relationship. Should be governed to prevent uncontrolled taxonomy growth.</td></tr><tr><td><a href="/pages/3kmYVWF0U2OteOnzGYfo#email">Email</a></td><td>Must be valid email format</td><td>Stored as data only. Custom email fields do not enable messaging workflows.</td></tr><tr><td><a href="/pages/udk276nkC0yUhCcx8GqY#files">Files</a></td><td>10 MB per file</td><td>Each upload creates a separate stored file, even when reused across records. Optional hard-delete permission available.</td></tr><tr><td><a href="/pages/awKXeQ0CeFn07V3OGeoB#longtext">Long Text / Rich Text</a></td><td>Up to 50,000 characters</td><td>Supports markdown rendering. Optimized for large content but limited in filtering and aggregation. Treated as unstructured data.</td></tr><tr><td><a href="/pages/lg7O68BVQcNPyvw02eYk#number-decimal">Number (Decimal)</a></td><td>Up to 15 digits total</td><td>Supports numeric filters and calculations. Values may be negative.</td></tr><tr><td><a href="/pages/3kmYVWF0U2OteOnzGYfo#phone-number">Phone Number</a></td><td>Must follow international (E.164) format</td><td>Automatically formats country codes. SMS uses the mobile phone field when applicable. Extensions supported for business numbers.</td></tr><tr><td><a href="/pages/CUl0W9I7Sxjm22ZvzM4p#radio-buttons">Radio Buttons</a></td><td>Up to 250 options</td><td>Single-select field rendered as buttons for fast selection.</td></tr><tr><td><a href="/pages/CUl0W9I7Sxjm22ZvzM4p#rating">Rating</a></td><td>5- or 10-point scale</td><td>Hybrid behavior: supports both categorical filtering and numeric comparisons (for example, “greater than”).</td></tr><tr><td><a href="/pages/udk276nkC0yUhCcx8GqY#relationship">Relationship</a></td><td>Supports 1:1, 1:M, M:1, and M:M</td><td>Automatically creates an inverse relationship field. Timeline displays individual values up to 20 records; larger sets are summarized. API responses summarize after 100 values. <strong>Not supported on forms.</strong></td></tr><tr><td><a href="/pages/CUl0W9I7Sxjm22ZvzM4p#status">Status</a></td><td>Up to 250 values</td><td>Dropdown field with color metadata for visual workflow tracking.</td></tr><tr><td><a href="/pages/udk276nkC0yUhCcx8GqY#team-selector">Team Member / Employee Selector</a></td><td>Active users only</td><td>References a user within the business. Honors permission visibility and audit tracking. Forms display employee names but not email addresses.</td></tr><tr><td><a href="/pages/awKXeQ0CeFn07V3OGeoB#text">Text (Short)</a></td><td>255 characters</td><td>Text fields store unstructured values and can be indexed to support search and type-ahead behavior when indexing is enabled. They are commonly used for identifiers, labels, and display names.</td></tr><tr><td><a href="/pages/lg7O68BVQcNPyvw02eYk#number-integer-whole">Whole Number (Integer)</a></td><td>Up to 2,147,483,647</td><td>Ideal for counts and whole-number quantities, including negative values when decreases or offsets must be tracked.</td></tr><tr><td><a href="/pages/CUl0W9I7Sxjm22ZvzM4p#yes-no-maybe">Yes / No / Maybe</a></td><td>Optional third state</td><td>Supports null values to distinguish between “No” and “No response.” Can be treated as a boolean in <code class="expression">space.vars.automation</code> logic.</td></tr></tbody></table>

***

## Custom Field Metadata

Each <code class="expression">space.vars.field</code> includes metadata that influences validation behavior, API interactions, and UI rendering.

Common metadata properties include:

* `is_required`: Field must be provided during record creation.
* `allows_nulls`: Accepts null values.
* `allows_empty`: Accepts empty values appropriate to the field type (for example `""`, `[]`, `{}`).
* `is_masked`: Obscures sensitive text until user interaction.
* `is_markdown`: Renders long text fields as rich text.

A field is considered clearable when it is not required and allows empty values.

Understanding metadata is particularly important when designing integrations or enforcing governance rules.

***

## Platform Limits

<code class="expression">space.vars.field</code> capacity varies by subscription level and should be considered during schema design.

* **Free accounts** support up to 50 Fields (including default fields) per <code class="expression">space.vars.object</code>
* **Paid plans** allow additional <code class="expression">space.vars.fields</code>, with limits determined by the organization’s purchased plan

If your implementation requires more fields than your current plan supports, contact [Customer Support](https://support.kizen.com/support/tickets/new) to discuss available options.

Regardless of plan, an <code class="expression">space.vars.object</code> supports a maximum of 500 custom fields. Approaching this limit may indicate schema complexity that should be reviewed for long-term scalability. If your use case requires additional fields, contact [Customer Support](https://support.kizen.com/support/tickets/new) to discuss available options and design considerations.

{% hint style="info" %}
**Note:** These limits also apply to forms and activity fields, reinforcing the importance of thoughtful schema design.
{% endhint %}

***

## Activity Field Alignment

Many <code class="expression">space.vars.fields</code> can also be reused as <code class="expression">space.vars.activity</code> fields, enabling consistent schema design across operational <code class="expression">space.vars.entities</code> such as calls, meetings, and tasks. Reusing structured fields enables consistent automation, filtering, and analytics across operational workflows.

For example:

* Dropdown fields can categorize logged calls
* Rating fields can measure interaction quality
* Relationship fields can link an activity to multiple related <code class="expression">space.vars.entities</code>, depending on your relationship configuration.

Aligning <code class="expression">space.vars.object</code> and <code class="expression">space.vars.activity</code> schemas improves reporting fidelity and operational clarity.

For more information see, [Activity Custom Fields](/docs/concepts/activities/activities-data-model#activity-custom-fields).

***

## Additional Information

<details>

<summary>Schema Design Best Practices</summary>

When creating <code class="expression">space.vars.fields</code>, consider the following guidelines:

* Prefer structured fields over free text when reporting, filtering, or automation will depend on the data.
* Select field types carefully, as they cannot be converted after creation without rebuilding the field and migrating data.
* Use relationships instead of large selection lists when modeling connections between records.
* Plan field API names intentionally, since changes may disrupt integrations, automations, and merge fields.
* Avoid excessive field counts, which can increase schema complexity and impact usability.

Thoughtful schema design improves data quality, simplifies reporting, and supports long-term platform scalability.

</details>

***

## What’s Next

Explore any of the field-specific documentation before implementing schema changes to ensure the selected field type supports your operational, reporting, and integration requirements.

<details>

<summary>Related Topics</summary>

* [Selection Field Types](/docs/concepts/objects/custom-fields/selection-field-types)
* [Date Field Types](/docs/concepts/objects/custom-fields/date-field-types)
* [Numerical Field Types](/docs/concepts/objects/custom-fields/numerical-field-types)
* [Text Field Types](/docs/concepts/objects/custom-fields/text-field-types)
* [Communication Field Types](/docs/concepts/objects/custom-fields/communication-field-types)
* [Special Field Types](/docs/concepts/objects/custom-fields/special-field-types)

</details>


# Date Field Types

Compare Date and DateTime fields in Kizen and learn when to use each to support reporting, automation, and time-based workflows.

{% hint style="success" %}
**Audience:** Admins, Developers, Solution Architects

**Purpose:** Explains how `date` and `datetime` fields capture temporal data and helps administrators, solution architects, and developers select the appropriate field type when designing <code class="expression">space.vars.object</code> schemas.
{% endhint %}

## Overview

Date field types are structured fields used to capture temporal data such as deadlines, milestones, scheduled events, historical timestamps, and operational triggers. These fields support reporting, <code class="expression">space.vars.automations</code>, sorting, filtering, and time-based workflows across the platform.

Selecting the appropriate date field type is a foundational schema decision that affects how data is stored, interpreted, and operationalized. The level of time precision required should guide your choice.

Date-based data is commonly used to:

* Trigger <code class="expression">space.vars.automations</code>
* Schedule activities
* Track service timelines
* Support reporting windows
* Monitor operational progress

<code class="expression">space.vars.Kizen\_company\_name</code> currently supports two date field types:

* `date`**:** captures a calendar date only
* `datetime`**:** captures both the calendar date and the exact time an event occurs or is planned to occur

`datetime` fields capture timezone-aware timestamps. `date` fields capture only the calendar date; when evaluated in time-based logic or comparisons, they are interpreted as midnight in the configured business timezone.

Understanding how timezones, storage formats, and precision affect these fields is essential when designing scalable <code class="expression">space.vars.object</code> schemas.

### Key Differences

The table below summarizes the core differences between `date` and `datetime` fields.

| Capability                                                   | Date         | DateTime                                                         |
| ------------------------------------------------------------ | ------------ | ---------------------------------------------------------------- |
| Stores time                                                  | No           | Yes                                                              |
| Precision                                                    | Day-level    | Records a millisecond-precise timestamp with timezone.           |
| <code class="expression">space.vars.automation</code> Timing | Date-based   | Time-based                                                       |
| Scheduling suitability                                       | Limited      | Ideal                                                            |
| API format                                                   | `YYYY-MM-DD` | [ISO 8601](https://en.wikipedia.org/wiki/ISO_8601) with timezone |

{% hint style="info" %}
**Note:** If timing affects execution, choose `datetime`. If it does not, choose `date`.
{% endhint %}

***

## Date

The `date` field captures a calendar date without an associated time value. This field is ideal when the exact time of day is irrelevant and would introduce unnecessary complexity into reporting or <code class="expression">space.vars.automation</code> logic.

### Common Use Cases

Use the `date` field when tracking:

* Contract start or renewal dates
* Birthdays or anniversaries
* Billing cycles
* Project milestones
* Compliance deadlines
* Processes that do not require time-of-day precision
* Reporting based on full calendar days
* <code class="expression">space.vars.automations</code> triggered relative to a date rather than a specific timestamp
* <code class="expression">space.vars.automations</code> that run at a consistent time on the selected day

Using a `date` field instead of `datetime` can simplify filtering and reduce schema complexity. Because no timestamp is stored, the value represents the entire calendar day.

### Behavior and Storage

When updating a `date` field through the API, values must be provided using the [ISO 8601](https://en.wikipedia.org/wiki/ISO_8601) format:

```
YYYY-MM-DD
```

#### Example of ISO 8601 Format

```
2026-10-21
```

If a field value is left blank, it is typically omitted from API responses when retrieving a <code class="expression">space.vars.entity</code>.

***

## DateTime

The `datetime` field captures both the calendar date and the exact time an event occurs, enabling precise operational workflows. This field is essential when the moment an event happens directly impacts <code class="expression">space.vars.automation</code>, scheduling, or reporting accuracy.

### Common Use Cases

Use the `datetime` field when:

* Scheduling meetings or activities
* Logging event timestamps
* Triggering time-sensitive <code class="expression">space.vars.automations</code>
* Monitoring response or resolution times
* Event timing must be exact
* <code class="expression">space.vars.automations</code> depend on a precise trigger moment
* Scheduling accuracy is required
* Analytics rely on timestamp granularity

Avoid using `datetime` when only the calendar day matters, as unnecessary precision can complicate filtering and reporting.

### Behavior and Storage

`datetime` values must be provided in [ISO 8601](https://en.wikipedia.org/wiki/ISO_8601) format and include a timezone designator (`Z` for UTC or an explicit offset such as `-0500`).

```
YYYY-MM-DDTHH:MM:SSZ
```

#### Example of ISO 8601 Format

```
2026-10-21T05:15:04Z
```

In the UI, time inputs are presented in 15-minute increments for consistency; however, the field can store any valid time value provided through the API.

### Timezone Interpretation

Each business defines a primary timezone that is used in system-driven contexts where user timezone is unavailable, such as <code class="expression">space.vars.automations</code>, reports, and emails. When user context exists, timestamps are presented relative to the user’s local timezone while the underlying value remains consistent for processing and reporting.

However, the API also accepts values with an explicit timezone offset for the `datetime` field type:

```
2024-10-09T05:00:00-0500
```

All timestamps are serialized with timezone information to prevent ambiguity across regions.

***

## Additional Information

<details>

<summary>Schema Design Best Practices</summary>

When working with temporal data:

* Select the lowest level of precision necessary
* Align fields with automation requirements early in schema design
* Ensure timezone expectations are clearly defined for distributed teams
* Avoid mixing `date` and `datetime` fields for the same operational purpose

Thoughtful planning prevents reporting inconsistencies and automation errors.

</details>

***

## What’s Next

Review field-specific documentation before implementing schema changes to ensure the selected field type supports your <code class="expression">space.vars.automation</code>, reporting, and integration requirements. Continue designing your schema with the following resources:

<details>

<summary>Related Topics</summary>

* [Selection Field Types](/docs/concepts/objects/custom-fields/selection-field-types)
* [Numerical Field Types](/docs/concepts/objects/custom-fields/numerical-field-types)
* [Text Field Types](/docs/concepts/objects/custom-fields/text-field-types)
* [Communication Field Types](/docs/concepts/objects/custom-fields/communication-field-types)
* [Special Field Types](/docs/concepts/objects/custom-fields/special-field-types)

</details>


# Selection Field Types

Learn how selection field types, such as dropdowns, checkboxes, and dynamic tags, enforce structured data, improve reporting accuracy, and support reliable automation when designing object schema.

{% hint style="success" %}
**Audience:** Administrators, Developers, Solution Architects

**Purpose:** Explains how selection-based field types capture structured, predefined values and helps administrators and developers choose the correct field type when designing <code class="expression">space.vars.object</code> schemas.
{% endhint %}

## Overview

Selection field types allow users to choose from predefined values instead of entering freeform data. By constraining input to controlled options, these fields:

* Enforce data consistency
* Reduce spelling variations and fragmentation
* Improve reporting accuracy
* Enable reliable filtering and segmentation
* Support predictable <code class="expression">space.vars.automation</code> behavior

Choosing the correct selection field type is a foundational schema decision that affects <code class="expression">space.vars.entity</code> filtering and grouping, <code class="expression">space.vars.automation</code> triggers, integration interpretation of field values, and the overall data entry experience across the system.

Some selection fields support a single value, while others allow multiple values. Understanding this distinction is critical when designing for reporting logic, workflow triggers, and API updates.

***

## Choosing the Right Selection Field

Use the table below to select the correct selection field based on reporting, <code class="expression">space.vars.automation</code>, and lifecycle requirements.

| Field type                                                | Single or Multi | Use when…                                                                                                         |
| --------------------------------------------------------- | --------------- | ----------------------------------------------------------------------------------------------------------------- |
| [**Dropdown (single value)**](#dropdown)                  | Single-select   | Only one value can apply at a time                                                                                |
| [**Radio Buttons**](#radio-buttons)                       | Single-select   | Only one value applies and all options are visible                                                                |
| [**Status**](#status)                                     | Single-select   | Tracking lifecycle or workflow progression with drop-down and color-coded visual context                          |
| [**Yes / No / Maybe**](#yes-no-maybe)                     | Single-select   | Capturing three-state logic (affirmative, negative, neutral); also can be two-state logic if maybe is toggled off |
| [**Rating**](#rating)                                     | Single-select   | Capturing a scored evaluation                                                                                     |
| [**Checkboxes** ](#checkboxes)                            | Multi-select    | Multiple predefined values may apply at once                                                                      |
| [**Dropdown (multi value)**](#dropdown-multi-value-field) | Muti-select     | Selecting multiple options from a predefined list                                                                 |
| [**Dynamic Tags** ](#dynamic-tags)                        | Multi-select    | Flexible categorization that may evolve over time                                                                 |

***

## Checkboxes

Checkboxes allow users to select multiple values from a predefined list.

### Common Use Cases

Use checkboxes when:

* Multiple categories may apply to a single <code class="expression">space.vars.entity</code>
* Values are relatively stable and predefined
* You need structured multi-value segmentation

Examples include:

* Product interests
* Skills or certifications
* Applicable service areas

### Behavior Considerations

Checkboxes support multi-select behavior, which affects filtering updates, and <code class="expression">space.vars.automation</code> logic across the system. A `checkboxes` field:

* Stores a list of selected options
* Allows zero, one, or multiple values per <code class="expression">space.vars.entity</code>
* Requires “contains” or multi-condition filtering logic
* Uses array-based updates in the API, including `add_values` and `remove_values`

### Reporting Considerations

Multi-select data can increase reporting complexity. Aggregations and filters must account for <code class="expression">space.vars.entities</code> containing multiple values.

{% hint style="warning" %}
**Note**: Avoid checkboxes when a <code class="expression">space.vars.entity</code> should belong to only one category, as multi-select fields complicate grouping and state-based <code class="expression">space.vars.automation</code> logic.
{% endhint %}

***

## Dropdown (Single-Select)

Dropdown fields allow users to select one value from a predefined list, ensuring clear and mutually exclusive categorization.

### Common Use Cases

Use a single-select dropdown when:

* Only one value should apply to a <code class="expression">space.vars.entity</code>
* You want clean, consistent grouping
* <code class="expression">space.vars.automation</code> and reporting depends on mutually exclusive states

Examples include:

* Business type
* Customer type
* Priority level

### Behavior Considerations

Single-select dropdowns enforce one active value per <code class="expression">space.vars.entity</code>, supporting unambiguous categorization and predictable <code class="expression">space.vars.automation</code> logic. A dropdown field:

* Enforces mutually exclusive options.
* Each record stores a single selected value.
* Ideal for standardized categorization.

Prefer single-select fields when records must belong to only one operational state.

### Reporting Considerations

Single-select dropdowns are ideal for reporting because each <code class="expression">space.vars.entity</code> contains exactly one standardized value, enabling clean aggregation and segmentation. A dropdown field:

* Produces reliable counts by category without duplication.
* Supports clear grouping in charts, dashboards, and pipeline summaries.
* Prevents ambiguous reporting caused by overlapping or multi-value selections.
* Enables consistent trend analysis over time when option values remain stable.

{% hint style="warning" %}
**Note:** Values are mutually exclusive, reports can safely assume that each belongs to one—and only one—category. To maintain reporting integrity, avoid frequently renaming or deleting options, as changes can fragment historical data.
{% endhint %}

### Why Choose Dropdown Over Radio Buttons?

Both dropdowns and radio buttons support single-select behavior but differ in presentation and space usage.

Choose Dropdown when:

* The list of options is long
* Screen space is limited
* Options do not need to be visible at all times
* You want a cleaner, more compact <code class="expression">space.vars.entity</code> layout

Dropdowns reduce visual clutter by collapsing options until clicked.

***

## Dropdown (Multi-Select)

When configured for multi-select, dropdown fields allow users to choose multiple values from a predefined list while maintaining a compact interface.

### Common Use Cases

Use multi-value dropdown when:

* Multiple classifications may apply
* The option set is longer and would be visually overwhelming as checkboxes
* You want a cleaner UI while retaining multi-select capability

### Behavior Considerations

Multi-select dropdowns support multiple structured values per <code class="expression">space.vars.entity</code>, which influences filtering, reporting, and API updates. A multi-select dropdown:

* Allows multiple values
* Saves structured list data
* Uses array-based updates in API interactions.

### Reporting Considerations

Multi-select dropdowns introduce additional reporting complexity because each <code class="expression">space.vars.entity</code> can contain multiple values. A multi-select dropdown:

* May count a single <code class="expression">space.vars.entity</code> in multiple categories when grouped by field value.
* Requires “contains” or array-based filtering logic in reports.
* Can inflate totals if reports do not distinguish between <code class="expression">space.vars.entity</code> count and value count.
* Is better suited for segmentation and overlap analysis than mutually exclusive categorization.

{% hint style="warning" %}
**Note**: Avoid multi-select configurations when mutually exclusive categorization is required, as multi-value data increases reporting and <code class="expression">space.vars.automation</code> complexity.
{% endhint %}

***

## Radio Buttons&#x20;

Provides a single-select experience where all options are visible.

### Common Use Cases

Use radio buttons when:

* The list of options is short
* Visibility of all choices improves usability
* You want to reduce clicks compared to a dropdown

Examples include:

* Yes / No style decisions (without a neutral state)
* Small categorization sets (e.g., Small / Medium / Large)

### Behavior Considerations

Radio buttons enforce mutually exclusive selection while keeping all options visible. A radio button field:

* Allows only one selected value
* Displays all options simultaneously
* Supports clear, unambiguous categorization

Prefer radio buttons when the option set is small enough to display without overwhelming the interface.

***

## Rating

Rating fields capture ordered, scaled evaluations that support scoring, comparison, and threshold-based <code class="expression">space.vars.automation</code>.

### Common Use Cases

Use rating fields for:

* Customer satisfaction scoring
* Priority or urgency scoring
* Internal quality assessments

### Behavior Considerations&#x20;

Rating fields store ordered values that are commonly evaluated numerically in reporting and <code class="expression">space.vars.automation</code> logic. A rating field:

* Stores a scaled-option value
* Supports scoring and qualitative assessments

Use rating fields when relative measurement is required rather than simple categorization.

### Reporting Considerations

Rating fields are especially useful when:

* You need averages or score distributions.
* <code class="expression">space.vars.automation</code>s depend on thresholds (for example, rating ≥ 4).

***

## Dynamic Tags&#x20;

Dynamic tag fields support flexible, multi-value categorization by allowing new tag values to be created at runtime without modifying field configuration.

### Common Use Cases

Use dynamic tags when:

* Categories evolve frequently.
* Users need flexible labeling without redesigning schema.
* Segmentation must remain structured but adaptable.

### Behavior Considerations

Dynamic tag fields support multi-select behavior and runtime value creation. A dynamic tag field:

* Allows multiple selected values per <code class="expression">space.vars.entity</code>
* Permits new tag values to be created without schema updates
* Supports incremental add and remove operations
* Maintains structured option identifiers for filtering and <code class="expression">space.vars.automation</code>

Use dynamic tags when flexibility is required, but avoid them when strict, predefined categorization is necessary.&#x20;

{% hint style="info" %}
**Note**: Admins can merge options to consolidate semantically similar tags and maintain clean, consistent data over time.
{% endhint %}

### Reporting Considerations

Dynamic tags maintain structured option IDs, enabling consistent filtering and <code class="expression">space.vars.automation</code> despite flexible categorization.

***

## Status&#x20;

Status fields represent a <code class="expression">space.vars.entity</code>’s lifecycle state and often drive operational workflows, reporting, and pipeline behavior.

### Common Use Cases

Use status fields when:

* Tracking lifecycle progression
* Representing operational state
* Driving <code class="expression">space.vars.automation</code> triggers based on state transitions
* Tracking severity of an issue (because of the various status colors)

### Behavior Considerations

Status fields frequently influence lifecycle workflows and system logic. A status field:

* Is always single-select
* Often integrates with pipeline and <code class="expression">space.vars.automation</code> behavior
* Can affect reporting calculations
* Includes configurable color indicators (the primary difference from a dropdown)

### Special Considerations

Status fields can:

* Influence reporting metrics
* Affect forecasting or performance tracking

Treat status fields as operational controls. Changes can directly impact <code class="expression">space.vars.automation</code>s, reporting accuracy, and forecasting.

***

## Yes / No / Maybe

Yes / No / Maybe fields capture explicit decision states when binary logic is insufficient.

### Common Use Cases

Use the Yes / No / Maybe fields when:

* You need to track uncertainty or pending decisions with blank values
* You want to avoid blank or null values to represent indecision

Examples include:

* Approval readiness
* Attendance confirmation
* Interest level

### Behavior Considerations

Yes / No / Maybe fields support three mutually exclusive responses, enabling explicit capture of affirmative, negative, and neutral states. This field:

* Allows selection of Yes, No, or Maybe
* Provides structured alternative to binary logic
* Explicitly supports neutral or undecided states
* Allows the “Maybe” option to be toggled off if only Yes/No is needed

***

## What’s Next

Before implementing schema changes, review field-specific documentation to understand configuration limits, API behavior, and downstream system impact. Continue building your field knowledge.

<details>

<summary>Related Topics</summary>

* [Date Field Types](/docs/concepts/objects/custom-fields/date-field-types)
* [Numerical Field Types](/docs/concepts/objects/custom-fields/numerical-field-types)
* [Text Field Types](/docs/concepts/objects/custom-fields/text-field-types)
* [Communication Field Types](/docs/concepts/objects/custom-fields/communication-field-types)
* [Special Field Types](/docs/concepts/objects/custom-fields/special-field-types)

</details>


# Numerical Field Types

Learn how numerical field types support reporting, automation, forecasting, and integrations. Compare decimal, integer, money, and probability fields to design accurate schemas.

{% hint style="success" %}
**Audience**: Administrators, Developers, Solution Architects

**Purpose**: Explain how to use numerical field types to accurately capture quantitative data and select the correct field type when designing <code class="expression">space.vars.object</code> schemas.
{% endhint %}

## Overview

Numerical field types are structured fields used to capture measurable values such as quantities, financial amounts, percentages, and projections.

These fields power:

* Accurate reporting and aggregation
* Mathematical operations and calculated values
* Forecasting and weighted projections
* <code class="expression">space.vars.automation</code> triggers and conditional logic
* API-based integrations and data pipelines

Selecting the correct numerical field type is a foundational schema decision that directly impacts data precision, validation behavior, formatting and display, reporting accuracy, and the reliability of downstream analytics and integrations.

Whenever numeric data will be aggregated, used in calculations, or evaluated by <code class="expression">space.vars.automation</code>, selecting the correct field type becomes critical.

{% hint style="warning" %}
**Warning**: Using the wrong numerical field type can introduce rounding issues, reporting inconsistencies, or unexpected <code class="expression">space.vars.automation</code> behavior.
{% endhint %}

The sections below explain each numerical field type and when to use it.

***

## Number (Decimal)

The `decimal` field type supports fractional values and is designed for data that requires precision beyond whole numbers.

### Common Use Cases

Use this field when values require fractional precision, such as:

* Percentages (for example, 12.5%)
* Rates (for example, 4.25% interest rate)
* Measurements (for example, 2.75 hours, 10.5 miles)
* Ratios and calculated outputs
* Financial values that are not currency-specific

### Behavior Considerations

Decimal fields support fractional input and are optimized for calculations, aggregations, and threshold-based <code class="expression">space.vars.automation</code>. A decimal field:

* Accepts numeric input with decimal points, including negative numbers
* Supports mathematical operations in reporting and <code class="expression">space.vars.automation</code>s
* Supports fractional values for reporting, calculations, and <code class="expression">space.vars.automation</code> logic
* Supports up to 15 total digits, with up to 4 digits displayed after the decimal point

Choose decimal fields if rounding errors may materially affect reporting accuracy, forecasts, or <code class="expression">space.vars.automation</code> logic.

If your data requires fractional accuracy, use `decimal` instead of `integer` to prevent truncation or rounding errors.

***

## Number (Integer / Whole)

The `integer` field type captures discrete numeric values that do not require fractional precision. Integer fields require whole-number values when inputted into the UI and API calls.

### Common Use Cases

Use this field when values must remain whole numbers, such as:

* Item counts
* Units in inventory
* Event attendance
* Number of employees

### Behavior Considerations

Integer fields enforce whole-number input, supporting accurate counting, aggregation, and threshold-based <code class="expression">space.vars.automation</code>**.** An integer field:

* Restricts values to whole numbers
* Allows negative values
* Supports values from `-2,147,483,647` to `2,147,483,647`. Values are displayed with comma separation
* Prevents fractional input
* Ensures consistent reporting and aggregation
* Supports clear quantitative comparisons

Use integer fields when fractional values would introduce ambiguity or distort reporting. By restricting precision, the `integer` field enforces data consistency and avoids unintended decimal usage.

***

## Money / Currency / Price

The `money` field captures monetary values and provide currency-aware handling to support financial reporting, forecasting, and operational workflows.

### Common Use Cases

Use this field for monetary values such as:

* Revenue tracking
* Deal values
* Pricing
* Budgeting
* Cost analysis
* Commerce-related workflows

### Behavior Considerations

Money fields are currency-aware and formatted according to the business’s configured currency settings. Depending on configuration:

* Values may use a single default currency
* Each Money field instance stores one monetary value in one currency

Currency configuration directly impacts reporting accuracy, forecasting, and financial integrations.

When designing financial schemas, confirm:

* Whether your organization operates in multiple currencies
* How currency conversion should be handled in reporting
* Whether downstream systems expect currency codes

Your currency strategy should be established before implementing financial fields.&#x20;

{% hint style="info" %}
**Note**: Money fields store currency values but do not perform currency conversion.
{% endhint %}

### Why Not Use Decimal for Money?

Decimal fields store numeric values without currency context.

Money fields store numeric values with associated currency formatting and display the appropriate currency symbol based on business configuration.

Use Money fields when values represent financial amounts and should be displayed with currency formatting in the application.

***

## % Chance to Close

The **% Chance to Close** field represents the probability that a pipeline <code class="expression">space.vars.entity</code> will reach a successful outcome. It is a system field used in weighted pipeline forecasting calculations.

This field is available on pipeline-enabled <code class="expression">space.vars.objects</code> and interacts with stage-level probability settings defined in the <code class="expression">space.vars.object</code>’s pipeline configuration. The value may be influenced by stage changes or, if enabled, AI-driven predictions.

### **Common Use Cases**

Use this field when managing probability-driven pipeline <code class="expression">space.vars.entities</code>, such as:

* Tracking sales opportunities
* Forecasting projected revenue
* Weighting deal values based on probability

The % Chance to Close field is part of the <code class="expression">space.vars.object</code>’s workflow and forecasting logic. It should be used only within lifecycle-driven pipeline <code class="expression">space.vars.objects</code> where probability impacts forecasting.

***

## Additional Information&#x20;

<details>

<summary>Schema Design Best Practices</summary>

Before implementing numerical fields:

* Confirm required precision
* Identify reporting and aggregation needs
* Evaluate <code class="expression">space.vars.automation</code> triggers using numeric comparisons
* Consider API integrations and downstream systems
* Avoid retroactive schema changes that may affect calculations

Changing numerical field types after implementation can disrupt reporting and integrations. Design intentionally.

</details>

***

## What’s Next

Review field-specific documentation before making schema changes to ensure consistent data behavior across <code class="expression">space.vars.objects</code>, <code class="expression">space.vars.workflow</code>s, and integrations. To continue designing your schema, review our related topics.

<details>

<summary>Related Topics</summary>

* [Date Field Types ](/docs/concepts/objects/custom-fields/date-field-types)
* [Selection Field Types](/docs/concepts/objects/custom-fields/selection-field-types)
* [Text Field Types](/docs/concepts/objects/custom-fields/text-field-types)
* [Communication Field Types](/docs/concepts/objects/custom-fields/communication-field-types)
* [Special Field Types](/docs/concepts/objects/custom-fields/special-field-types)

</details>


# Text Field Types

Learn how Text and LongText fields capture written data in Kizen. Compare field capabilities, limits, and schema design considerations to select the appropriate field type for scalable data models.

{% hint style="success" %}
**Audience:** Admins, Developers, Solution Architects

**Purpose:** Explains how `text` and `longtext` fields store written information and helps administrators, solution architects, and developers choose the appropriate field type when designing <code class="expression">space.vars.object</code> schemas.
{% endhint %}

## Overview

Text field types are flexible fields used to capture descriptive or narrative information that cannot always be constrained to predefined values. These fields provide important context that helps users interpret <code class="expression">space.vars.entities</code>, understand operational history, and document key details.

Text-based data commonly supports:

* Notes and summaries
* Descriptions
* Identifiers
* Titles
* Comments
* Contextual <code class="expression">space.vars.entity</code> information

Selecting the appropriate text field type helps balance flexibility with usability. While freeform input enables richer context, thoughtful schema design ensures that written data remains readable, searchable, and operationally valuable.

<code class="expression">space.vars.Kizen\_company\_name</code> supports two primary text field types:

* `text`: optimized for short, structured inputs
* `longtext`: designed for extended written content

Choosing the correct field type is a foundational schema decision that influences searchability, reporting capabilities, <code class="expression">space.vars.automation</code> behavior, and overall <code class="expression">space.vars.entity</code> clarity.

### Key Differences

The table below summarizes the core differences between `text` and `longtext` fields.

| Capability            | Text                     | LongText                   |
| --------------------- | ------------------------ | -------------------------- |
| Character limit       | 255                      | 50,000                     |
| Intended use          | Short, structured inputs | Extended narrative content |
| Search optimization   | Strong                   | Limited                    |
| Reporting suitability | Moderate                 | Low                        |
| Scannability          | High                     | Lower for dense content    |
| Formatting support    | Plain text               | Markdown-enabled rendering |

{% hint style="info" %}
**Note:** If the value should be quickly read, filtered, or searched, choose `text`. If the value requires depth and explanation, choose `longtext`.
{% endhint %}

***

## LongText

The `longtext` field is designed to store extended written content and multi-paragraph information.

This field is best suited for scenarios where detailed explanations or narrative context are necessary to understand a <code class="expression">space.vars.entity</code>.

Use this field for extended narrative content that requires multi-paragraph readability. Avoid it when concise, structured data is sufficient.

### Common Use Cases

Use a `longtext` field when capturing:

* Detailed notes
* Meeting summaries
* Project descriptions
* Case documentation
* Internal commentary
* Multi-step instructions
* AI- or LLM-generated content that uses structured formatting such as Markdown

`longtext` fields support up to 50,000 characters, allowing teams to preserve comprehensive operational knowledge directly within a <code class="expression">space.vars.entity</code>. For content that exceeds this limit, consider attaching a text file or external document to maintain full detail.

### Behavior and Search Considerations

`longtext` fields support rich text formatting through markdown rendering, improving readability for extended content. These formatting enhancements affect display and editing only and do not alter the stored value.

Because `longtext` fields store large amounts of unstructured data, they are not optimized for structured reporting or detailed filtering. Indexing behavior may also differ to support platform performance, which can limit advanced search capabilities compared to shorter text fields.

***

## Text

The `text` field is intended for shorter written inputs that benefit from quick readability and structured usage. This field supports values up to 255 characters, making it ideal for concise information that users need to scan quickly or reference frequently.

Use this field for short, structured data that must be easily searchable, filterable, or quickly scanned.

### Common Use Cases

Use a `text` field when capturing:

* Names or labels
* Titles
* Identifiers
* Short descriptors
* Reference values
* Brief comments

Shorter `text` fields help maintain cleaner record layouts and improve overall usability.

### Behavior and Search Considerations

`text` fields are typically indexed to support search and type-ahead functionality, making them more effective for lookup scenarios than long-form content. Because values are structured and compact, these fields are often easier to leverage in filters, lightweight reporting, and <code class="expression">space.vars.automation</code> conditions.

`text` fields can also be used in display configurations where readable identifiers are required across the platform and support flexible filtering options such as contains, starts with, and exact match.

***

## Additional Information

<details>

<summary>Schema Design Best Practices</summary>

When designing schemas that include written data:

* Prefer structured fields (such as dropdowns or relationships) when reporting or segmentation is required
* Use `text` instead of `longtext` whenever possible to improve searchability and usability
* Reserve `longtext` for information that genuinely requires expanded narrative
* Avoid storing operational data inside large text blocks that cannot be easily filtered
* Consider <code class="expression">space.vars.entity</code> readability as overly verbose schemas can reduce efficiency for end users

Thoughtful text field selection helps maintain scalable data models while preserving important context.

</details>

***

## What’s Next

Review field-specific documentation before implementing schema changes to ensure the selected field type supports your operational, reporting, and integration requirements. Continue designing your schema with the following resources:

<details>

<summary>Related Topics</summary>

* [Date Field Types](/docs/concepts/objects/custom-fields/date-field-types)
* [Selection Field Types](/docs/concepts/objects/custom-fields/selection-field-types)
* [Numerical Field Types](/docs/concepts/objects/custom-fields/numerical-field-types)
* [Communication Field Types](/docs/concepts/objects/custom-fields/communication-field-types)
* [Special Field Types](/docs/concepts/objects/custom-fields/special-field-types)

</details>


# Communication Field Types

Learn how communication field types support email, phone, automation, and integrations. Use validated contact fields to improve deliverability, identity matching, and data quality.

{% hint style="success" %}
**Audience:** Administrators, Developers, Solution Architects

**Purpose:** Explains how communication field types capture validated contact data to support messaging, <code class="expression">space.vars.automation</code>, identity matching, and integrations.
{% endhint %}

## Overview

Communication fields are specialized field types designed to store <code class="expression">space.vars.contact</code> information used for messaging, notifications, and outreach. Unlike generic text or numerical fields, communication fields include built-in validation and formatting behaviors that help maintain data quality and support reliable system-driven communication.

These fields support:

* Email messaging and marketing <code class="expression">space.vars.automation</code>
* SMS and phone outreach
* <code class="expression">space.vars.contact</code> verification and identity matching
* Integrations with external third-party messaging and voice systems

Using dedicated communication fields instead of generic `text` fields improves:

* Data consistency
* Deliverability and formatting reliability
* <code class="expression">space.vars.automation</code> accuracy
* Integration compatibility

When communication workflows depend on a field, use the appropriate communication field type rather than freeform text.

{% hint style="warning" %}
**Note**: Avoid storing communication data in text fields, as doing so can compromise deliverability, <code class="expression">space.vars.automation</code>, and identity matching.
{% endhint %}

### Communication Fields vs. Text Fields

If the value powers outreach, validation, identity, or integration, use a communication field.

| Scenario                                                            | Use Communication Field                    | Use Text Field                                                              |
| ------------------------------------------------------------------- | ------------------------------------------ | --------------------------------------------------------------------------- |
| Sending emails                                                      | ✅ [Email](#email)                          | ❌ Text                                                                      |
| Sending SMS                                                         | ✅ [Phone Number](#phone-number)            | ❌ Text                                                                      |
| Storing <code class="expression">space.vars.contact</code> identity | ✅ [Email](#email) / [Phone](#phone-number) | ❌ Text                                                                      |
| Capturing descriptive notes                                         | ❌                                          | ✅ [Text / Long Text](/docs/concepts/objects/custom-fields/text-field-types) |
| Storing non-validated strings                                       | ❌                                          | ✅ [Text](/docs/concepts/objects/custom-fields/text-field-types)             |

***

## Email

The `email` field captures validated email addresses and often functions as a primary <code class="expression">space.vars.contact</code> identifier across communication, <code class="expression">space.vars.automation</code>, and integration workflows.

Only the <code class="expression">space.vars.contact</code>’s email and Team Member’s email fields can be used for system or <code class="expression">space.vars.automation</code> emails.

### Common Use Cases

Use this field when the value will:

* Send marketing or transactional emails
* Trigger email-based <code class="expression">space.vars.automation</code>s
* Serve as a login or unique <code class="expression">space.vars.contact</code> identifier
* Integrate with external email platforms
* Support lookup or upsert operations by email

The platform validates email formatting at the API and UI layers. Invalid values are rejected (for example, “Enter a valid email address.”), protecting <code class="expression">space.vars.automation</code> logic and outreach workflows from malformed data.&#x20;

### Behavior Considerations

The `email` field directly influences identity matching, <code class="expression">space.vars.automation</code> behavior, and integrations.

* Format validation is enforced at the API and UI layers
* Email may function as a unique identifier for <code class="expression">space.vars.contacts</code>
* Uniqueness constraints may apply
* Normalization standards should be defined to ensure consistent matching

Always use an `email` field instead of a `text` field when sorting email addresses. Freeform text does not enforce validation and can lead to <code class="expression">space.vars.automation</code> failures, integration errors, and deliverability issues.

***

## Phone Number

The `phonenumber` field captures validated telephone <code class="expression">space.vars.contact</code> data using standardized formatting to support voice, SMS, and telephony integrations.&#x20;

Only <code class="expression">space.vars.contact</code> and Team Member phone fields can be used for system calling or SMS workflows.

### Common Use Cases

Use this field when the value will:

* Support outbound or inbound calls
* Enable SMS messaging
* Power communication <code class="expression">space.vars.automations</code>
* Integrate with telephony providers
* Support <code class="expression">space.vars.contact</code> verification workflows

Structured phone data improves consistency across <code class="expression">space.vars.entities</code> and reduces formatting errors that can disrupt communication workflows.

### Behavior Considerations

The Phone Number field directly impacts delivery reliability, <code class="expression">space.vars.automation</code> behavior, and telephony integrations.

* **Standardized formatting supports downstream systems**: Consistent formatting improves integration reliability and reduces communication failures.&#x20;
* **API and upload values must use E.164 format:** When creating or updating phone fields via the API or bulk upload, values must be submitted in E.164 format (for example, `+14155552671`). E.164 is an international numbering standard that requires a leading `+`, country code, and full national number, with no spaces or formatting characters. See [E.164](#overview) for more information.
* **International numbers require a defined convention**: Establish requirements for country codes and extensions so integrations do not misinterpret values.
* **Reduce duplicates and ambiguity:** If you capture multiple phone numbers (mobile, work, home), make the “primary” number explicit so <code class="expression">space.vars.automations</code> don’t message the wrong channel.

Always use a `phonenumber` field instead of a `text` field when storing telephone data. Free form text can introduce formatting inconsistencies that disrupt integrations and messaging workflows.

***

## Additional Information

<details>

<summary>Schema Design Best Practices</summary>

### Email

Use an `email` field instead of a `text` field whenever:

* The data represents an actual email address
* Deliverability and formatting matter
* <code class="expression">space.vars.automation</code>s or integrations depend on the value

Avoid storing email addresses in generic text fields. Freeform text does not enforce validation and can lead to:

* Failed automations
* Integration errors
* Poor deliverability
* Inconsistent formatting

Validated email data improves automation reliability and protects downstream communication processes.

### SMS

Use a dedicated `phonenumber` field instead of freeform `text` when:

* The number will be used for calls or SMS
* Downstream systems require structured formatting
* <code class="expression">space.vars.automation</code>s rely on valid phone data

Storing phone numbers in generic text fields can introduce:

* Inconsistent formatting
* International number issues
* Failed SMS or call attempts
* Integration mismatches

Using the `phonenumber` field ensures cleaner data and more reliable communication execution.

</details>

***

## What’s Next

Before implementing schema changes, review the field-specific documentation and API definitions to ensure compatibility with <code class="expression">space.vars.automation</code> and integration requirements <code class="expression">space.vars.Kizen\_company\_name</code> API. To continue designing effective schemas, review our other Field topics:

<details>

<summary>Related Topics</summary>

* [Selection Field Types](/docs/concepts/objects/custom-fields/selection-field-types)
* [Date Field Types](/docs/concepts/objects/custom-fields/date-field-types)
* [Numerical Field Types](/docs/concepts/objects/custom-fields/numerical-field-types)
* [Text Field Types](/docs/concepts/objects/custom-fields/text-field-types)
* [Special Field Types](/docs/concepts/objects/custom-fields/special-field-types)

</details>


# Special Field Types

Learn how special field types in Kizen support relationships, file storage, and team ownership. Understand advanced field behaviors and schema design considerations for scalable data models.

{% hint style="success" %}
**Audience:** Admins, Developers, Solution Architects

**Purpose:** Explains how special field types support advanced data modeling and helps administrators, solution architects, and developers select the appropriate field when designing <code class="expression">space.vars.object</code> schemas.
{% endhint %}

## Overview

Special field types are advanced fields that extend schema capabilities beyond simple data capture. These fields enable more sophisticated data modeling by supporting structured relationships, centralized file storage, and team-based ownership and responsibility.

Unlike basic field types, which store discrete values such as text or numbers, special fields influence how <code class="expression">space.vars.entities</code> connect to one another, how users collaborate, and how data is governed across the platform. Because of their broader impact, selecting and configuring these fields is an important architectural decision when designing scalable <code class="expression">space.vars.object</code> schemas.

Special field types are commonly used to:

* Model relationships between <code class="expression">space.vars.entities</code>
* Centralize supporting documents and assets
* Assign ownership or responsibility
* Enable collaboration and workflow routing

Understanding how these fields behave, and when to use them, helps prevent schema design issues that can affect reporting accuracy, <code class="expression">space.vars.automation</code> reliability, permissions, and long-term maintainability.

### Checkbox

The Checkbox field supports a single binary selection and is best suited for true/false style data points. This field stores a boolean-style value and is useful for capturing simple conditions or flags that influence filtering, automation, or <code class="expression">space.vars.entity</code> state.

#### Common Use Cases

Use a Checkbox field when capturing:

* Feature enabled or disabled states
* Confirmation indicators
* Simple eligibility flags
* One-time acknowledgements

#### Design Guidance

Choose a single Checkbox when only one binary condition is required. Avoid using this field when multiple selections or categorical values are needed, as selection-based field types are more appropriate in those cases.

{% hint style="info" %}
**Note:** If you need to have multiple selections or categorical values, use the multi-selection checkboxes field type.
{% endhint %}

### Files

The Files field allows <code class="expression">space.vars.entities</code> to store and reference uploaded documents or digital assets directly within the <code class="expression">space.vars.entity</code> context. Each uploaded file is stored as a separate asset, even if the same file is uploaded to multiple <code class="expression">space.vars.entities</code>.

#### Common Use Cases

Use a Files field to attach:

* Contracts or agreements
* Images or media assets
* Supporting documentation
* Operational resources
* Reference files

Centralizing files within <code class="expression">space.vars.entities</code> improves context, reduces dependency on external storage systems, and supports collaboration across teams. Uploaded files are automatically scanned for potential threats and may be removed if a virus is detected or suspected.

#### Behavior and Governance Considerations

Files are associated with the specific <code class="expression">space.vars.entity</code> where they are uploaded. Removing a file reference does not automatically remove the file from other <code class="expression">space.vars.entities</code> where it may exist.

Permissions determine whether users can upload, remove, or permanently delete files. Because files may contain sensitive information, access controls should be planned carefully. Thoughtful file organization helps prevent unnecessary duplication and keeps <code class="expression">space.vars.entities</code> manageable.

### Relationship

The Relationship field connects <code class="expression">space.vars.entities</code> across <code class="expression">space.vars.objects</code>, enabling structured associations within the data model. Relationship fields are foundational to modeling how entities relate to one another and play a critical role in schema architecture.

For more information, see [Object Relationships](/docs/concepts/objects/object-configuration/object-relationships).

#### Common Use Cases

Use Relationship fields to:

* Link contacts to organizations
* Associate deals with accounts
* Connect related operational <code class="expression">space.vars.entities</code>
* Model hierarchical or peer relationships

#### Behavior and Architecture Considerations

Relationship fields automatically create an inverse relationship on the related <code class="expression">space.vars.object</code>, enabling navigation in both directions.

Relationships support:

* Cross-<code class="expression">space.vars.object</code> reporting
* <code class="expression">space.vars.automation</code> triggers and conditions
* <code class="expression">space.vars.entity</code> navigation and context

When relationship fields contain many values, the platform summarizes them in timelines and API responses to maintain usability and performance. Because relationships define how data is interconnected, they should be designed intentionally to preserve data integrity, avoid ambiguity, and support long-term scalability. It is important to treat relationship fields as architectural components and not simple attributes.

### Team Selector

The Team Selector field assigns ownership or responsibility to specific team members within the organization. This field references active users and is commonly used to model accountability and collaboration.

#### Common Use Cases

Use a Team Selector field to:

* Assign <code class="expression">space.vars.entity</code> ownership in the system Owner field
* Route work to specific users
* Define responsibility for follow-up
* Support collaboration workflows
* Influence visibility and access

#### Permissions and Workflow Impact

Team-based assignments can affect permissions, workflow routing, and operational visibility depending on how access controls and <code class="expression">space.vars.automations</code> are configured. Align team assignments with organizational structure to ensure consistent governance and reduce confusion around responsibility and access.

***

## Additional Information

<details>

<summary>Schema Design Best Practices</summary>

When working with special field types:

* Use relationships instead of large selection lists when modeling connected data.
* Plan file access and permissions carefully to avoid governance issues.
* Align team assignments with workflow and access requirements.
* Treat relationship fields as architectural components, not simple attributes.

Intentional use of special fields strengthens data integrity, improves collaboration, and supports scalable system design.

</details>

***

## What’s Next

Review field-specific documentation before implementing schema changes to ensure the selected field type supports your operational, reporting, and integration requirements. Continue designing your schema with the following resources:

<details>

<summary>Related Topics</summary>

* [Date Field Types](/docs/concepts/objects/custom-fields/date-field-types)
* [Selection Field Types](/docs/concepts/objects/custom-fields/selection-field-types)
* [Numerical Field Types ](/docs/concepts/objects/custom-fields/numerical-field-types)
* [Text Field Types](/docs/concepts/objects/custom-fields/text-field-types)
* [Communication Field Types](/docs/concepts/objects/custom-fields/communication-field-types)

</details>


# Custom Field Permissions

Learn how Custom Field Permissions control field-level visibility and edit access to protect sensitive data and enforce layered security across objects and records.

{% hint style="success" %}
**Audience:** Admins, Developers, Solution Architects

**Purpose:** Explains how custom field permissions control visibility and edit access, and helps administrators configure field-level governance within Permission Groups.
{% endhint %}

## Overview

Custom field permissions define who can view or modify specific field values within accessible records, enabling granular control over sensitive data and operational integrity.

Because field permissions refine access within already accessible records, they serve as a critical governance control rather than a primary access mechanism.

Field-level access is configured inside **Permission Groups** and applies to both standard and custom fields on an object. These controls refine access after object-level and record-level permissions have already been granted. For more context, see [Object Permissions](/docs/concepts/objects/object-configuration/object-permissions).&#x20;

Custom field permissions help administrators:

* Protect sensitive information
* Prevent unauthorized edits
* Maintain reporting integrity
* Support governance policies

***

## How Field Permissions Work

Field permissions are configured within Permission Groups and apply to both standard and custom fields on an object. The selected access level determines whether users can modify field values within records they are already permitted to access.

Access is evaluated cumulatively:

* Object permissions determine whether a user can access the object
* Record-level controls determine which records are accessible
* Field permissions determine which fields within those records are visible or editable

All layers must allow access for a user to modify a field value.

For example, a user may have access to a Deal record but not have permission to view the “Margin” field. In this case, the record remains visible, but the restricted field is hidden.

Field permissions refine access. They do not override object-level denial of access, and they cannot grant visibility where object or record access does not exist.

<details>

<summary>Configuring Field Permissions</summary>

#### 1. Select settings in Kizen's navigation

<div data-with-frame="true"><figure><img src="/files/EqStR18j0IeuEdXNUMfd" alt="" width="563"><figcaption></figcaption></figure></div>

#### 2. Go to Team, Roles, & Permissions

Navigate to the Permissions Group subtab.

<figure><img src="/files/qgfAE4fo4A4R9XOUA0Fc" alt=""><figcaption></figcaption></figure>

#### 3. Edit the Permissions Group

Navigate to the Permission Group to edit.

<div data-with-frame="true"><figure><img src="/files/vP4iaBDFejieqSxvUfHn" alt="" width="563"><figcaption></figcaption></figure></div>

#### **4. Select the three dots underneath Actions,  and select Edit.**

<figure><img src="/files/k59k4iQ5yr9I6C5uxa2y" alt=""><figcaption></figcaption></figure>

#### 5. View the Permission Group settings

The example below is for a Deliveries Custom Object.

<div data-with-frame="true"><figure><img src="/files/UWhgONyXpDmpuuRYgvWf" alt="" width="563"><figcaption></figcaption></figure></div>

#### 6. Scroll down until you reach Default Fields

You can edit your custom field permissions from here.

<div data-with-frame="true"><figure><img src="/files/hbXS38JOvUEWr0QGvzoi" alt="" width="563"><figcaption></figcaption></figure></div>

</details>

***

## Permission Types

Custom fields support the following access levels:

* **None:** The field is hidden
* **View:** The field value is visible but cannot be edited
* **Create/Edit:** The field value can be viewed and modified
* **Delete/All (**[**Files**](#files-field) **only):** The field value can be hard deleted from the timeline.

These permission types control whether users can:

* View field data
* Modify field values
* Remove or delete field data (where supported)

Selecting the appropriate permission level ensures field data is accessible only to users responsible for maintaining it, supporting structured governance.

For more information, see [Record Permissions](broken://pages/uhMfsDTB0PmOzSEoHKUi).&#x20;

***

## When to Restrict Field Access

Restrict field access when governance, compliance, or operational requirements require controlled visibility or modification.

Limiting field access may be appropriate for:

* Sensitive financial information
* Personally identifiable information (PII)
* Compensation details
* Approval-only fields
* System-managed values populated by <code class="expression">space.vars.automations</code>

Restrict **edit access** when:

* Field values drive reporting or forecasting
* Data is managed by <code class="expression">space.vars.automations</code> or integrations
* Changes should be limited to specific roles

Restrict **visibility** when:

* Data is confidential
* Visibility creates compliance or privacy risk
* Information is not relevant to certain roles

Administrators should align field restrictions with organizational policies and clearly defined operational responsibilities.

Over-restricting field access can disrupt reporting, <code class="expression">space.vars.automations</code>, or integrations that rely on consistent field visibility. Evaluate restrictions carefully to balance security and operational effectiveness.

***

## Additional Information

#### Default for New Fields

Each Permission Group includes a **Default for New Fields** setting. This determines the automatic access level assigned to newly created fields.&#x20;

Administrators should configure this setting carefully to prevent unintended exposure of new data. Regularly review this setting to ensure it aligns with governance standards.

#### Files Field

The **Files** field type includes an additional permission that allows permanently deletion (“hard delete”). Most other fields allow removal or archiving of values but do not support permanent deletion.

<details>

<summary>Custom Field Best Practices</summary>

* Set intentional defaults for new fields.
* Restrict edit access for reporting-critical or automation-driven fields.
* Limit visibility of confidential or regulated data.
* Align permissions with defined roles rather than individuals.
* Review Permission Groups periodically to reduce configuration risk.
* Document governance decisions related to restricted fields.

</details>

***

## What’s Next

Understanding how field-level controls interact with broader access management ensures secure and predictable data governance. To design secure and scalable data models, review related topics:

<details>

<summary>Related Topics</summary>

* [Custom Fields](/docs/concepts/objects/custom-fields)
* [Customize Object Fields](/docs/concepts/objects/object-configuration/customize-object-fields)
* [Object Permissions](/docs/concepts/objects/object-configuration/object-permissions)
* [Custom Field APIs](/docs/concepts/objects/custom-fields/custom-field-apis)

</details>

***


# Custom Field APIs

Learn how Custom Field APIs expose metadata for schema discovery, validation, and dynamic integrations. Identify the right endpoints to build resilient, schema-aware applications.

## Overview

<code class="expression">space.vars.field</code> APIs expose field metadata so developers can understand schemas, validate configurations, and build integrations that adapt as data models evolve. These endpoints support schema-aware development by enabling dynamic field references instead of static mappings.

Access to metadata is essential for scalable integration design because it allows applications to:

* Discover schema structure automatically
* Validate payloads before synchronization
* Adapt to configuration changes
* Map fields across systems
* Support middleware and transformation workflows

Using metadata-driven integrations reduces the risk of failures caused by schema drift and improves long-term maintainability.

### How Custom Fields Are Exposed Programmatically

<code class="expression">space.vars.fields</code> are exposed through metadata endpoints as structured objects that describe how each field behaves. API responses include field identifiers, data types, configuration and validation rules, permission-based visibility, and category groupings.

Use these APIs when integrations must adapt to changing schemas or validate configuration before writing data. Retrieving field metadata helps ensure valid values, supports field mapping, enables dynamic integrations, and reduces reliance on hard-coded references for greater long-term stability.

***

## API Topics in This Section

Use the following endpoints to retrieve and interact with <code class="expression">space.vars.field</code> metadata:

* [Retrieve Object Details API](/docs/concepts/objects/object-apis/retrieve-object-details-by-id-api)
* [Search for Object Fields API](/docs/concepts/objects/custom-fields/custom-field-apis/search-object-fields-api)
* [Retrieve Object Field Options API](/docs/concepts/objects/custom-fields/custom-field-apis/retrieve-object-field-options-api)

Use these endpoints to fetch metadata and available option sets, allowing you to discover the schema and verify valid values before sending data through your integration.

Dynamic tag fields also support runtime value creation. To reference available tags programmatically, retrieve field options using the field options endpoint before submitting data.

***

## What’s Next

Review related metadata and schema topics when designing integrations to ensure your implementation can adapt as the platform evolves. Continue building schema-aware integrations with the following resources:

<details>

<summary>Related Topics</summary>

* [Custom Fields](/docs/concepts/objects/custom-fields)
* [Search for Custom Object Fields API](/docs/concepts/objects/custom-fields/custom-field-apis/search-object-fields-api)
* [Retrieve Object Field Options API](/docs/concepts/objects/custom-fields/custom-field-apis/retrieve-object-field-options-api)
* [Retrieve Object Details API](/docs/concepts/objects/object-apis/retrieve-object-details-by-id-api)
* [Custom Field Permissions](/docs/concepts/objects/custom-fields/custom-field-permissions)

</details>


# Search Object Fields API

Query and filter custom object field definitions via API to support schema discovery, metadata validation, and efficient integration workflows.

{% hint style="success" %}
**Audience:** Developers and Integration Engineers

**Purpose:** Explains how to retrieve filtered field metadata for a specific <code class="expression">space.vars.object</code> without requesting full <code class="expression">space.vars.object</code> configuration details
{% endhint %}

## Overview

Use the **Search for Object Fields** endpoint to retrieve field definitions for a specific <code class="expression">space.vars.object</code> using structured query criteria.

This endpoint supports schema discovery and schema-aware integrations by enabling external systems to locate fields by type or configuration, validate field availability, and retrieve field-level metadata without loading full <code class="expression">space.vars.object</code> details. Because field configurations may vary across <code class="expression">space.vars.objects</code> or environments, searching fields dynamically helps integrations remain adaptable and efficient.

Unlike the [Retrieve Object Details by ID API](/docs/concepts/objects/object-apis/retrieve-object-details-by-id-api), this endpoint focuses exclusively on field-level metadata and supports filtering to reduce response size and improve performance.

The material on this page builds on information covered in [Objects Core Concepts](/docs/concepts/objects/object-core-concepts) and the [Object Data Model](/docs/concepts/objects/object-data-model).

### Why Use This API?

You can use the Search <code class="expression">space.vars.object</code> Fields API when you need to:

* Dynamically retrieve field metadata for a specific <code class="expression">space.vars.object</code>
* Identify fields by type (For Example: dropdown, relationship, money, date)
* Validate that required fields exist before sending <code class="expression">space.vars.entity</code> updates
* Confirm whether fields allow null or empty values
* Retrieve only numeric fields for reporting or calculations
* Filter fields by category for UI rendering or form generation
* Reduce payload size when full <code class="expression">space.vars.object</code> configuration is unnecessary
* Build schema-aware integrations that adapt to configuration changes

This endpoint is especially useful when your integration needs precise field-level metadata without loading layouts, workflows, related <code class="expression">space.vars.objects</code>, or other <code class="expression">space.vars.object</code>-level configuration details.

### Search for Custom Object Fields API Behavior

The Search for <code class="expression">space.vars.object</code> Fields endpoint searches for fields within a single custom <code class="expression">space.vars.object</code> and returns only the matching field definitions. The search is limited to the specified `object_pk`. It does not return object-level details such as layouts, workflows, related <code class="expression">space.vars.objects</code>, or actions.

Results are returned as a simple array of field <code class="expression">space.vars.objects</code> (not paginated). You can use query parameters to filter by:

* Field type
* Category
* Default status
* Numeric fields
* Text search

The response format is the same field metadata structure returned by the <code class="expression">space.vars.object</code> Detail endpoint, but filtered to include only the fields that match your search criteria.

***

## Search for Object Fields Endpoint

Want to try the API out? Visit our [Swagger](https://app.go.kizen.com/api/docs/public/swagger#/custom-objects/custom_objects_fields_search_create) docs.

## POST /api/custom-objects/{object\_pk}/fields/search

> Search fields

```json
{"openapi":"3.0.3","info":{"title":"Kizen API","version":"1.0.0"},"security":[{"businessId":[],"userId":[],"apiKey":[]}],"components":{"securitySchemes":{"businessId":{"type":"apiKey","in":"header","name":"X-BUSINESS-ID"}},"schemas":{"CustomObjectDetailedFieldReadRequest":{"type":"object","properties":{"id":{"type":"string","format":"uuid"},"name":{"type":"string","minLength":1},"category":{"type":"string","format":"uuid"},"display_name":{"type":"string","minLength":1},"canonical_display_name":{"type":"string","minLength":1},"is_default":{"type":"boolean"},"field_type":{"$ref":"#/components/schemas/FieldTypeEnum"},"is_required":{"type":"boolean"},"is_read_only":{"type":"boolean"},"is_hidden":{"type":"boolean"},"is_deletable":{"type":"boolean"},"is_hideable":{"type":"boolean"},"is_suppressed":{"type":"boolean"},"include_in_short_form":{"type":"string","minLength":1},"allows_nulls":{"type":"boolean"},"allows_empty":{"type":"boolean"},"order":{"type":"integer"},"meta":{"type":"object","additionalProperties":{}},"description":{"type":"string","minLength":1},"description_visibility":{"$ref":"#/components/schemas/DescriptionVisibilityEnum"},"properties":{"type":"object","additionalProperties":{}},"access":{"$ref":"#/components/schemas/AccessSerpyRequest"},"options":{"type":"array","items":{"$ref":"#/components/schemas/FieldOptionSerpyRequest"}},"relation":{"$ref":"#/components/schemas/CustomObjectFieldRelationRequest"},"allow_on_forms":{"type":"boolean"}},"required":["access","allow_on_forms","allows_empty","allows_nulls","canonical_display_name","category","description","description_visibility","display_name","field_type","id","include_in_short_form","is_default","is_deletable","is_hidden","is_hideable","is_read_only","is_required","is_suppressed","meta","name","options","order","properties","relation"]},"FieldTypeEnum":{"enum":["checkbox","checkboxes","choices","date","datetime","decimal","dropdown","dynamictags","email","files","integer","longtext","money","phonenumber","radio","rating","relationship","selector","status","team_selector","text","timezone","wysiwyg","yesnomaybe"],"type":"string","description":"* `checkbox` - Checkbox\n* `checkboxes` - Checkboxes\n* `choices` - Choices\n* `date` - Date\n* `datetime` - Datetime\n* `decimal` - Decimal Number\n* `dropdown` - Dropdown\n* `dynamictags` - Dynamic Tags\n* `email` - Email\n* `files` - Files\n* `integer` - Whole Number\n* `longtext` - Long Text\n* `money` - Money\n* `phonenumber` - Phone Number\n* `radio` - Radio\n* `rating` - Rating\n* `relationship` - Relationship\n* `selector` - Selector\n* `status` - Status\n* `team_selector` - Team Selector\n* `text` - Text\n* `timezone` - Timezone\n* `wysiwyg` - Wysiwyg\n* `yesnomaybe` - Yes / No / Maybe Question"},"DescriptionVisibilityEnum":{"enum":["all","create_only","settings_only"],"type":"string","description":"* `all` - All Labels\n* `create_only` - Only on Create\n* `settings_only` - Only in Settings"},"AccessSerpyRequest":{"type":"object","properties":{"view":{"type":"boolean"},"edit":{"type":"boolean"},"remove":{"type":"boolean"}},"required":["edit","remove","view"]},"FieldOptionSerpyRequest":{"type":"object","properties":{"id":{"type":"string","format":"uuid"},"code":{"type":"string","minLength":1},"name":{"type":"string","minLength":1},"order":{"type":"integer"},"meta":{"type":"object","additionalProperties":{}},"percentage_chance_to_close":{"type":"integer"},"chance_to_close_percentage":{"type":"integer"},"status":{"$ref":"#/components/schemas/PipelineStageStatusEnum"}},"required":["chance_to_close_percentage","code","id","meta","name","order","percentage_chance_to_close","status"]},"PipelineStageStatusEnum":{"enum":["open","won","lost","disqualified"],"type":"string","description":"* `open` - open\n* `won` - won\n* `lost` - lost\n* `disqualified` - disqualified"},"CustomObjectFieldRelationRequest":{"type":"object","properties":{"related_object":{"type":"string","format":"uuid"},"related_category":{"type":"string","format":"uuid","nullable":true},"related_name":{"type":"string","nullable":true,"minLength":1},"relation_type":{"$ref":"#/components/schemas/FieldRelationTypeEnum"},"rollup_timeline":{"type":"boolean"},"rollup_leadsources":{"type":"boolean"},"inverse_relation_rollup_timeline":{"type":"boolean"},"inverse_relation_rollup_leadsources":{"type":"boolean"},"inverse_relation_suppressed":{"type":"boolean"}},"required":["related_category","related_object"]},"FieldRelationTypeEnum":{"enum":["one_to_one","primary","additional","primary_for","additional_for"],"type":"string","description":"* `one_to_one` - one to one\n* `primary` - primary\n* `additional` - additional\n* `primary_for` - primary for\n* `additional_for` - additional for"},"CustomObjectDetailedFieldRead":{"type":"object","properties":{"id":{"type":"string","format":"uuid"},"name":{"type":"string"},"category":{"type":"string","format":"uuid"},"display_name":{"type":"string"},"canonical_display_name":{"type":"string"},"is_default":{"type":"boolean"},"field_type":{"$ref":"#/components/schemas/FieldTypeEnum"},"is_required":{"type":"boolean"},"is_read_only":{"type":"boolean"},"is_hidden":{"type":"boolean"},"is_deletable":{"type":"boolean"},"is_hideable":{"type":"boolean"},"is_suppressed":{"type":"boolean"},"include_in_short_form":{"type":"string"},"allows_nulls":{"type":"boolean"},"allows_empty":{"type":"boolean"},"order":{"type":"integer"},"meta":{"type":"object","additionalProperties":{}},"description":{"type":"string"},"description_visibility":{"$ref":"#/components/schemas/DescriptionVisibilityEnum"},"properties":{"type":"object","additionalProperties":{}},"access":{"$ref":"#/components/schemas/AccessSerpy"},"options":{"type":"array","items":{"$ref":"#/components/schemas/FieldOptionSerpy"}},"relation":{"$ref":"#/components/schemas/CustomObjectFieldRelation"},"allow_on_forms":{"type":"boolean"}},"required":["access","allow_on_forms","allows_empty","allows_nulls","canonical_display_name","category","description","description_visibility","display_name","field_type","id","include_in_short_form","is_default","is_deletable","is_hidden","is_hideable","is_read_only","is_required","is_suppressed","meta","name","options","order","properties","relation"]},"AccessSerpy":{"type":"object","properties":{"view":{"type":"boolean"},"edit":{"type":"boolean"},"remove":{"type":"boolean"}},"required":["edit","remove","view"]},"FieldOptionSerpy":{"type":"object","properties":{"id":{"type":"string","format":"uuid"},"code":{"type":"string"},"name":{"type":"string"},"order":{"type":"integer"},"meta":{"type":"object","additionalProperties":{}},"percentage_chance_to_close":{"type":"integer"},"chance_to_close_percentage":{"type":"integer"},"status":{"$ref":"#/components/schemas/PipelineStageStatusEnum"}},"required":["chance_to_close_percentage","code","id","meta","name","order","percentage_chance_to_close","status"]},"CustomObjectFieldRelation":{"type":"object","properties":{"related_field":{"type":"string","format":"uuid","readOnly":true},"related_object":{"type":"string","format":"uuid"},"related_category":{"type":"string","format":"uuid","nullable":true},"related_name":{"type":"string","nullable":true},"related_object_name":{"type":"string","readOnly":true},"related_object_object_name":{"type":"string","readOnly":true},"related_entity_name":{"type":"string","readOnly":true},"relation_type":{"$ref":"#/components/schemas/FieldRelationTypeEnum"},"cardinality":{"allOf":[{"$ref":"#/components/schemas/CardinalityEnum"}],"readOnly":true},"fetch_url":{"type":"string","readOnly":true},"rollup_timeline":{"type":"boolean"},"rollup_leadsources":{"type":"boolean"},"inverse_relation_rollup_timeline":{"type":"boolean"},"inverse_relation_rollup_leadsources":{"type":"boolean"},"inverse_relation_suppressed":{"type":"boolean"},"related_object_default_on_activities":{"type":"string","readOnly":true}},"required":["cardinality","fetch_url","related_category","related_entity_name","related_field","related_object","related_object_default_on_activities","related_object_name","related_object_object_name"]},"CardinalityEnum":{"enum":["one_to_one","many_to_many","many_to_one","one_to_many"],"type":"string","description":"* `one_to_one` - 1 to 1\n* `many_to_many` - Many to Many\n* `many_to_one` - Many to 1\n* `one_to_many` - 1 to Many"}}},"paths":{"/api/custom-objects/{object_pk}/fields/search":{"post":{"operationId":"custom_objects_fields_search_create","description":"Search fields","parameters":[{"in":"query","name":"category","schema":{"type":"string","format":"uuid"}},{"in":"query","name":"field_type","schema":{"type":"string","enum":["checkbox","checkboxes","choices","date","datetime","decimal","dropdown","dynamictags","email","files","integer","longtext","money","phonenumber","radio","rating","relationship","selector","status","team_selector","text","timezone","wysiwyg","yesnomaybe"]},"description":"* `checkbox` - Checkbox\n* `checkboxes` - Checkboxes\n* `choices` - Choices\n* `date` - Date\n* `datetime` - Datetime\n* `decimal` - Decimal Number\n* `dropdown` - Dropdown\n* `dynamictags` - Dynamic Tags\n* `email` - Email\n* `files` - Files\n* `integer` - Whole Number\n* `longtext` - Long Text\n* `money` - Money\n* `phonenumber` - Phone Number\n* `radio` - Radio\n* `rating` - Rating\n* `relationship` - Relationship\n* `selector` - Selector\n* `status` - Status\n* `team_selector` - Team Selector\n* `text` - Text\n* `timezone` - Timezone\n* `wysiwyg` - Wysiwyg\n* `yesnomaybe` - Yes / No / Maybe Question"},{"in":"query","name":"field_type__in","schema":{"type":"array","items":{"type":"string"}},"description":"Multiple values may be separated by commas.","explode":false,"style":"form"},{"in":"query","name":"is_default","schema":{"type":"boolean"}},{"in":"query","name":"numeric","schema":{"type":"boolean"}},{"in":"path","name":"object_pk","schema":{"type":"string"},"required":true},{"in":"query","name":"ordering","schema":{"type":"string","enum":["order"]},"description":"Which field to use when ordering the results. Prepend with '-' for descending order."},{"name":"search","required":false,"in":"query","description":"A search term.","schema":{"type":"string"}}],"tags":["custom-objects"],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/CustomObjectDetailedFieldReadRequest"}}},"required":true},"responses":{"200":{"content":{"application/json":{"schema":{"type":"array","items":{"$ref":"#/components/schemas/CustomObjectDetailedFieldRead"}}}},"description":""}}}}}}
```

### Search for Object Fields Schema

## The CustomObjectDetailedFieldReadRequest object

```json
{"openapi":"3.0.3","info":{"title":"Kizen API","version":"1.0.0"},"components":{"schemas":{"CustomObjectDetailedFieldReadRequest":{"type":"object","properties":{"id":{"type":"string","format":"uuid"},"name":{"type":"string","minLength":1},"category":{"type":"string","format":"uuid"},"display_name":{"type":"string","minLength":1},"canonical_display_name":{"type":"string","minLength":1},"is_default":{"type":"boolean"},"field_type":{"$ref":"#/components/schemas/FieldTypeEnum"},"is_required":{"type":"boolean"},"is_read_only":{"type":"boolean"},"is_hidden":{"type":"boolean"},"is_deletable":{"type":"boolean"},"is_hideable":{"type":"boolean"},"is_suppressed":{"type":"boolean"},"include_in_short_form":{"type":"string","minLength":1},"allows_nulls":{"type":"boolean"},"allows_empty":{"type":"boolean"},"order":{"type":"integer"},"meta":{"type":"object","additionalProperties":{}},"description":{"type":"string","minLength":1},"description_visibility":{"$ref":"#/components/schemas/DescriptionVisibilityEnum"},"properties":{"type":"object","additionalProperties":{}},"access":{"$ref":"#/components/schemas/AccessSerpyRequest"},"options":{"type":"array","items":{"$ref":"#/components/schemas/FieldOptionSerpyRequest"}},"relation":{"$ref":"#/components/schemas/CustomObjectFieldRelationRequest"},"allow_on_forms":{"type":"boolean"}},"required":["access","allow_on_forms","allows_empty","allows_nulls","canonical_display_name","category","description","description_visibility","display_name","field_type","id","include_in_short_form","is_default","is_deletable","is_hidden","is_hideable","is_read_only","is_required","is_suppressed","meta","name","options","order","properties","relation"]},"FieldTypeEnum":{"enum":["checkbox","checkboxes","choices","date","datetime","decimal","dropdown","dynamictags","email","files","integer","longtext","money","phonenumber","radio","rating","relationship","selector","status","team_selector","text","timezone","wysiwyg","yesnomaybe"],"type":"string","description":"* `checkbox` - Checkbox\n* `checkboxes` - Checkboxes\n* `choices` - Choices\n* `date` - Date\n* `datetime` - Datetime\n* `decimal` - Decimal Number\n* `dropdown` - Dropdown\n* `dynamictags` - Dynamic Tags\n* `email` - Email\n* `files` - Files\n* `integer` - Whole Number\n* `longtext` - Long Text\n* `money` - Money\n* `phonenumber` - Phone Number\n* `radio` - Radio\n* `rating` - Rating\n* `relationship` - Relationship\n* `selector` - Selector\n* `status` - Status\n* `team_selector` - Team Selector\n* `text` - Text\n* `timezone` - Timezone\n* `wysiwyg` - Wysiwyg\n* `yesnomaybe` - Yes / No / Maybe Question"},"DescriptionVisibilityEnum":{"enum":["all","create_only","settings_only"],"type":"string","description":"* `all` - All Labels\n* `create_only` - Only on Create\n* `settings_only` - Only in Settings"},"AccessSerpyRequest":{"type":"object","properties":{"view":{"type":"boolean"},"edit":{"type":"boolean"},"remove":{"type":"boolean"}},"required":["edit","remove","view"]},"FieldOptionSerpyRequest":{"type":"object","properties":{"id":{"type":"string","format":"uuid"},"code":{"type":"string","minLength":1},"name":{"type":"string","minLength":1},"order":{"type":"integer"},"meta":{"type":"object","additionalProperties":{}},"percentage_chance_to_close":{"type":"integer"},"chance_to_close_percentage":{"type":"integer"},"status":{"$ref":"#/components/schemas/PipelineStageStatusEnum"}},"required":["chance_to_close_percentage","code","id","meta","name","order","percentage_chance_to_close","status"]},"PipelineStageStatusEnum":{"enum":["open","won","lost","disqualified"],"type":"string","description":"* `open` - open\n* `won` - won\n* `lost` - lost\n* `disqualified` - disqualified"},"CustomObjectFieldRelationRequest":{"type":"object","properties":{"related_object":{"type":"string","format":"uuid"},"related_category":{"type":"string","format":"uuid","nullable":true},"related_name":{"type":"string","nullable":true,"minLength":1},"relation_type":{"$ref":"#/components/schemas/FieldRelationTypeEnum"},"rollup_timeline":{"type":"boolean"},"rollup_leadsources":{"type":"boolean"},"inverse_relation_rollup_timeline":{"type":"boolean"},"inverse_relation_rollup_leadsources":{"type":"boolean"},"inverse_relation_suppressed":{"type":"boolean"}},"required":["related_category","related_object"]},"FieldRelationTypeEnum":{"enum":["one_to_one","primary","additional","primary_for","additional_for"],"type":"string","description":"* `one_to_one` - one to one\n* `primary` - primary\n* `additional` - additional\n* `primary_for` - primary for\n* `additional_for` - additional for"}}}}
```

## The CustomObjectDetailedFieldRead object

```json
{"openapi":"3.0.3","info":{"title":"Kizen API","version":"1.0.0"},"components":{"schemas":{"CustomObjectDetailedFieldRead":{"type":"object","properties":{"id":{"type":"string","format":"uuid"},"name":{"type":"string"},"category":{"type":"string","format":"uuid"},"display_name":{"type":"string"},"canonical_display_name":{"type":"string"},"is_default":{"type":"boolean"},"field_type":{"$ref":"#/components/schemas/FieldTypeEnum"},"is_required":{"type":"boolean"},"is_read_only":{"type":"boolean"},"is_hidden":{"type":"boolean"},"is_deletable":{"type":"boolean"},"is_hideable":{"type":"boolean"},"is_suppressed":{"type":"boolean"},"include_in_short_form":{"type":"string"},"allows_nulls":{"type":"boolean"},"allows_empty":{"type":"boolean"},"order":{"type":"integer"},"meta":{"type":"object","additionalProperties":{}},"description":{"type":"string"},"description_visibility":{"$ref":"#/components/schemas/DescriptionVisibilityEnum"},"properties":{"type":"object","additionalProperties":{}},"access":{"$ref":"#/components/schemas/AccessSerpy"},"options":{"type":"array","items":{"$ref":"#/components/schemas/FieldOptionSerpy"}},"relation":{"$ref":"#/components/schemas/CustomObjectFieldRelation"},"allow_on_forms":{"type":"boolean"}},"required":["access","allow_on_forms","allows_empty","allows_nulls","canonical_display_name","category","description","description_visibility","display_name","field_type","id","include_in_short_form","is_default","is_deletable","is_hidden","is_hideable","is_read_only","is_required","is_suppressed","meta","name","options","order","properties","relation"]},"FieldTypeEnum":{"enum":["checkbox","checkboxes","choices","date","datetime","decimal","dropdown","dynamictags","email","files","integer","longtext","money","phonenumber","radio","rating","relationship","selector","status","team_selector","text","timezone","wysiwyg","yesnomaybe"],"type":"string","description":"* `checkbox` - Checkbox\n* `checkboxes` - Checkboxes\n* `choices` - Choices\n* `date` - Date\n* `datetime` - Datetime\n* `decimal` - Decimal Number\n* `dropdown` - Dropdown\n* `dynamictags` - Dynamic Tags\n* `email` - Email\n* `files` - Files\n* `integer` - Whole Number\n* `longtext` - Long Text\n* `money` - Money\n* `phonenumber` - Phone Number\n* `radio` - Radio\n* `rating` - Rating\n* `relationship` - Relationship\n* `selector` - Selector\n* `status` - Status\n* `team_selector` - Team Selector\n* `text` - Text\n* `timezone` - Timezone\n* `wysiwyg` - Wysiwyg\n* `yesnomaybe` - Yes / No / Maybe Question"},"DescriptionVisibilityEnum":{"enum":["all","create_only","settings_only"],"type":"string","description":"* `all` - All Labels\n* `create_only` - Only on Create\n* `settings_only` - Only in Settings"},"AccessSerpy":{"type":"object","properties":{"view":{"type":"boolean"},"edit":{"type":"boolean"},"remove":{"type":"boolean"}},"required":["edit","remove","view"]},"FieldOptionSerpy":{"type":"object","properties":{"id":{"type":"string","format":"uuid"},"code":{"type":"string"},"name":{"type":"string"},"order":{"type":"integer"},"meta":{"type":"object","additionalProperties":{}},"percentage_chance_to_close":{"type":"integer"},"chance_to_close_percentage":{"type":"integer"},"status":{"$ref":"#/components/schemas/PipelineStageStatusEnum"}},"required":["chance_to_close_percentage","code","id","meta","name","order","percentage_chance_to_close","status"]},"PipelineStageStatusEnum":{"enum":["open","won","lost","disqualified"],"type":"string","description":"* `open` - open\n* `won` - won\n* `lost` - lost\n* `disqualified` - disqualified"},"CustomObjectFieldRelation":{"type":"object","properties":{"related_field":{"type":"string","format":"uuid","readOnly":true},"related_object":{"type":"string","format":"uuid"},"related_category":{"type":"string","format":"uuid","nullable":true},"related_name":{"type":"string","nullable":true},"related_object_name":{"type":"string","readOnly":true},"related_object_object_name":{"type":"string","readOnly":true},"related_entity_name":{"type":"string","readOnly":true},"relation_type":{"$ref":"#/components/schemas/FieldRelationTypeEnum"},"cardinality":{"allOf":[{"$ref":"#/components/schemas/CardinalityEnum"}],"readOnly":true},"fetch_url":{"type":"string","readOnly":true},"rollup_timeline":{"type":"boolean"},"rollup_leadsources":{"type":"boolean"},"inverse_relation_rollup_timeline":{"type":"boolean"},"inverse_relation_rollup_leadsources":{"type":"boolean"},"inverse_relation_suppressed":{"type":"boolean"},"related_object_default_on_activities":{"type":"string","readOnly":true}},"required":["cardinality","fetch_url","related_category","related_entity_name","related_field","related_object","related_object_default_on_activities","related_object_name","related_object_object_name"]},"FieldRelationTypeEnum":{"enum":["one_to_one","primary","additional","primary_for","additional_for"],"type":"string","description":"* `one_to_one` - one to one\n* `primary` - primary\n* `additional` - additional\n* `primary_for` - primary for\n* `additional_for` - additional for"},"CardinalityEnum":{"enum":["one_to_one","many_to_many","many_to_one","one_to_many"],"type":"string","description":"* `one_to_one` - 1 to 1\n* `many_to_many` - Many to Many\n* `many_to_one` - Many to 1\n* `one_to_many` - 1 to Many"}}}}
```

***

## What's Next?

After retrieving field metadata with this API, you can:

* Retrieve full <code class="expression">space.vars.object</code> configuration (including categories and all fields) when you need broader schema context.
* Retrieve selectable field option values (for dropdowns, dynamic tags, radio buttons, and checkboxes) so your integration can validate allowed values.
* Use field IDs and names to safely read or write field values on records.
* Explore the <code class="expression">space.vars.fields</code> and schema metadata docs to understand field behaviors, constraints, and mapping best practices.

Continue learning about field types with the following resources:

<details>

<summary>Related Topics</summary>

* [Object APIs](/docs/concepts/objects/object-apis)
* [Object API Names](/docs/concepts/objects/object-apis/object-api-names)
* [Retrieve Object Details API](/docs/concepts/objects/object-apis/retrieve-object-details-by-id-api)
* [Retrieve Object Field Options API](/docs/concepts/objects/custom-fields/custom-field-apis/retrieve-object-field-options-api)

</details>

***


# Retrieve Object Field Options API

Retrieve selectable field options for custom object fields via the Kizen API to validate inputs, align with object schema, and power dynamic integrations.

{% hint style="success" %}
**Audience:** Technical Builders, Implementors, and Developers

**Purpose:** Enables programmatic retrieval of field option metadata for <code class="expression">space.vars.object</code> fields so integrations can safely validate values and align with the <code class="expression">space.vars.object</code> schema.
{% endhint %}

## Overview

Use the **Retrieve Object Field Options** endpoint to programmatically retrieve the configured option values for selectable field types such as dropdowns, dynamic tags, radio buttons, and checkboxes.

This endpoint supports schema-aware integrations by allowing external systems to align with an <code class="expression">space.vars.object</code>’s current field configuration and validate allowed values before submitting <code class="expression">space.vars.entity</code> updates. Because selectable options may vary across <code class="expression">space.vars.objects</code> or environments, retrieving them dynamically helps prevent invalid data submissions and hard-coded dependencies.

The material on this page builds on information covered in [Objects Core Concepts](/docs/concepts/objects/object-core-concepts) and the [Object Data Model](/docs/concepts/objects/object-data-model).

### Why Use this API?

Call this endpoint when your integration needs to understand which values are permitted for selectable fields. In most implementations, a direct call is unnecessary because field options are included in the `/fields/` and `/custom-objects/*/details` responses. It is most useful when field options must be retrieved independently or when minimizing payload size is important.

Common scenarios include:

* Building dynamic UI components that reflect <code class="expression">space.vars.object</code> configuration
* Validating values before writing data to <code class="expression">space.vars.entities</code>
* Supporting integrations across multiple businesses with different schemas
* Avoiding hard-coded option IDs or labels
* Synchronizing controlled vocabularies between systems

Because <code class="expression">space.vars.fields</code> extend the default data model to store additional data, retrieving their configuration is often a prerequisite for reliable <code class="expression">space.vars.entity</code> operations.

### Retrieve Object Field Options API Behavior

Understanding how this endpoint behaves helps prevent common integration mistakes.

* This endpoint returns the configured option values for a specific field (for example, dropdown, radio, checkboxes, or dynamic tags) and does not return <code class="expression">space.vars.entity</code>-level field values
* The request is scoped using `object_pk` and `field_pk` (UUIDs) and integrations typically retrieve or store these identifiers as part of <code class="expression">space.vars.object</code> and field discovery
* If `include_entity_count=true`, the response includes `entity_count` and becomes paginated, which is useful when you need to understand how widely an option is used
* Because selectable values are configuration-driven, retrieving options dynamically helps integrations adapt across businesses with different <code class="expression">space.vars.object</code> setups

***

## Retrieve Object Field Options Endpoint

Want to try the API out? Visit our [Swagger](https://app.go.kizen.com/api/docs/public/swagger#/custom-objects/custom_objects_fields_options_list) docs.

## List field options

> Lists field options for single or multi-select fields, such as dynamic tags, checkboxes, dropdown, radio, etc

```json
{"openapi":"3.0.3","info":{"title":"Kizen API","version":"1.0.0"},"security":[{"businessId":[],"userId":[],"apiKey":[]}],"components":{"securitySchemes":{"businessId":{"type":"apiKey","in":"header","name":"X-BUSINESS-ID"}},"schemas":{"PaginatedFieldOptionList":{"type":"object","required":["count","results"],"properties":{"count":{"type":"integer"},"next":{"type":"string","nullable":true,"format":"uri"},"previous":{"type":"string","nullable":true,"format":"uri"},"results":{"type":"array","items":{"$ref":"#/components/schemas/FieldOption"}},"errors":{"oneOf":[{"type":"null"},{"type":"array","items":{"type":"string"}}]}}},"FieldOption":{"type":"object","properties":{"id":{"type":"string","format":"uuid"},"code":{"type":"string"},"name":{"type":"string"},"order":{"type":"integer"},"entity_count":{"type":"integer","nullable":true,"readOnly":true},"meta":{},"percentage_chance_to_close":{"type":"integer","nullable":true,"description":"Stage's percentage chance to close, applicable only for stage field."},"status":{"nullable":true,"description":"Stage's status, applicable only for stage field.\n\n* `open` - open\n* `won` - won\n* `lost` - lost\n* `disqualified` - disqualified","oneOf":[{"$ref":"#/components/schemas/PipelineStageStatusEnum"},{"$ref":"#/components/schemas/NullEnum"}]}},"required":["entity_count","name"]},"PipelineStageStatusEnum":{"enum":["open","won","lost","disqualified"],"type":"string","description":"* `open` - open\n* `won` - won\n* `lost` - lost\n* `disqualified` - disqualified"},"NullEnum":{"enum":[null]}}},"paths":{"/api/custom-objects/{object_pk}/fields/{field_pk}/options":{"get":{"operationId":"custom_objects_fields_options_list","description":"Lists field options for single or multi-select fields, such as dynamic tags, checkboxes, dropdown, radio, etc","summary":"List field options","parameters":[{"in":"path","name":"field_pk","schema":{"type":"string","format":"uuid"},"required":true},{"in":"query","name":"include_entity_count","schema":{"type":"boolean"},"description":"Includes entity_count in response and makes the response paginated."},{"in":"path","name":"object_pk","schema":{"type":"string","format":"uuid"},"required":true},{"in":"query","name":"ordering","schema":{"type":"string","enum":["entity_count","name","order"]},"description":"Which field to use when ordering the results. Prepend with '-' for descending order."},{"name":"page","required":false,"in":"query","description":"A page number within the paginated result set.","schema":{"type":"integer"}},{"name":"page_size","required":false,"in":"query","description":"Number of results to return per page.","schema":{"type":"integer"}},{"name":"search","required":false,"in":"query","description":"A search term.","schema":{"type":"string"}}],"tags":["custom-objects"],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/PaginatedFieldOptionList"}}},"description":""}}}}}}
```

### Retrieve Object Field Options Schemas

## The PaginatedFieldOptionList object

```json
{"openapi":"3.0.3","info":{"title":"Kizen API","version":"1.0.0"},"components":{"schemas":{"PaginatedFieldOptionList":{"type":"object","required":["count","results"],"properties":{"count":{"type":"integer"},"next":{"type":"string","nullable":true,"format":"uri"},"previous":{"type":"string","nullable":true,"format":"uri"},"results":{"type":"array","items":{"$ref":"#/components/schemas/FieldOption"}},"errors":{"oneOf":[{"type":"null"},{"type":"array","items":{"type":"string"}}]}}},"FieldOption":{"type":"object","properties":{"id":{"type":"string","format":"uuid"},"code":{"type":"string"},"name":{"type":"string"},"order":{"type":"integer"},"entity_count":{"type":"integer","nullable":true,"readOnly":true},"meta":{},"percentage_chance_to_close":{"type":"integer","nullable":true,"description":"Stage's percentage chance to close, applicable only for stage field."},"status":{"nullable":true,"description":"Stage's status, applicable only for stage field.\n\n* `open` - open\n* `won` - won\n* `lost` - lost\n* `disqualified` - disqualified","oneOf":[{"$ref":"#/components/schemas/PipelineStageStatusEnum"},{"$ref":"#/components/schemas/NullEnum"}]}},"required":["entity_count","name"]},"PipelineStageStatusEnum":{"enum":["open","won","lost","disqualified"],"type":"string","description":"* `open` - open\n* `won` - won\n* `lost` - lost\n* `disqualified` - disqualified"},"NullEnum":{"enum":[null]}}}}
```

***

## What's Next?

After retrieving field options via the API, you can:

* Retrieve <code class="expression">space.vars.object</code> and field metadata to understand schema structure.
* Create or update <code class="expression">space.vars.entities</code> using validated option identifiers.
* Combine field options with metadata APIs to support dynamic, schema-aware integrations.

For more information on <code class="expression">space.vars.objects</code>, check out the following topics:

<details>

<summary>Related Topics</summary>

* [Object APIs](/docs/concepts/objects/object-apis)
* [Object API Names](/docs/concepts/objects/object-apis/object-api-names)
* [Retrieve Object Details by ID API](/docs/concepts/objects/object-apis/retrieve-object-details-by-id-api)
* [Search for Object Fields](/docs/concepts/objects/custom-fields/custom-field-apis/search-object-fields-api)

</details>


# Records

xplore how Records manage structured business data in Kizen, support workflows and permissions, and power reporting and API integrations.

{% hint style="success" %}
**Audience:** Admins, Developers, Solution Architects

**Purpose:** Explains how <code class="expression">space.vars.entities</code> function as the platform’s operational data layer, capturing structured business data and enabling workflows, permissions, reporting, and API-driven integrations.
{% endhint %}

## Overview

<code class="expression">space.vars.entities</code> are the individual instances of business data managed within the platform. They represent the active information that teams create, update, relate, automate, and report on every day. Each <code class="expression">space.vars.entity</code> captures the data values associated with a specific business, such as a deal, asset, policy, or contact. When you interact with your data, you are interacting with <code class="expression">space.vars.entities</code>.

<code class="expression">space.vars.entities</code> power operational execution. They:

* Store business data
* Participate in <code class="expression">space.vars.automations</code>
* Support relationships between data
* Respect permission and access controls
* Serve as the foundation for reporting and integrations

While identifiers and required values may vary by <code class="expression">space.vars.object</code> type, the underlying concept remains consistent: a <code class="expression">space.vars.entity</code> is a single, manageable instance of structured business data.

***

## Records Mastery Checklist

Explore the following topics to understand how <code class="expression">space.vars.entities</code> function within the platform and support operational business data.

**Core Knowledge**

* [ ] What a record represents and when to use it **(Topic Coming Soon)**
* [ ] How records store and surface business data **(Topic Coming Soon)**
* [ ] How records differ from configuration artifacts like object schemas **(Topic Coming Soon)**

**Record Behavior**

* [ ] How record values are captured, updated, and archived **(Topic Coming Soon)**
* [ ] How records participate in Agentic Workflows **(Topic Coming Soon)**
* [ ] How record relationships connect data across objects **(Topic Coming Soon)**

**Access & Control**

* [ ] How permissions influence record visibility and editing rights **(Topic Coming Soon)**
* [ ] How team associations and interaction history affect access **(Topic Coming Soon)**
* [ ] How record-level access integrates with broader security models **(Topic Coming Soon)**

**Integration & APIs**

* [ ] How records are structured in API responses **(Topic Coming Soon)**
* [ ] How to retrieve, search, and update records via API **(Topic Coming Soon)**
* [ ] [How identifiers (such as record names or email) are resolved in lookup workflows](/docs/concepts/objects/records/records-apis/lookup-record-api)
* [ ] [How identifiers are used in upsert workflows](/docs/concepts/objects/records/records-apis/create-or-update-records-upsert-api)

***

## What’s Next

Continue to [Records Core Concepts](/docs/concepts/objects/records/records-core-concepts) to establish the foundational mental model required before configuring <code class="expression">space.vars.entities</code>, designing schema strategies, or working with APIs.

<details>

<summary>Related Topics</summary>

* [Objects](/docs/concepts/objects)
* [Custom Fields](/docs/concepts/objects/custom-fields)
* [Records Core Concepts](/docs/concepts/objects/records/records-core-concepts)&#x20;
* [Records Data Model](/docs/concepts/objects/records/records-data-model)
* [Records APIs](/docs/concepts/objects/records/records-apis)

</details>


# Records Core Concepts

Understand how Records store structured business data in Kizen and power workflows, permissions, reporting, and API integrations.

{% hint style="success" icon="circle-check" %}
**Audience:** Admins, Developers, Solution Architects

**Purpose:** Explains how <code class="expression">space.vars.entities</code> function as the platform’s operational data layer, storing structured business data and enabling workflows, permissions, reporting, and API-driven integrations.
{% endhint %}

## Overview

<code class="expression">space.vars.entities</code> are the stored instances of business data that teams create, update, relate, and act upon within the platform. Each <code class="expression">space.vars.entity</code> holds the field data that represents a single deal, asset, policy, or contact. When users interact with the system, they are interacting with <code class="expression">space.vars.entities</code>.

A helpful analogy is a database table row. Each <code class="expression">space.vars.entity</code> represents a single row of stored data, containing the values that define one distinct <code class="expression">space.vars.entity</code>.

<div data-with-frame="true"><figure><img src="/files/OYwHQwtRTEKv5nSP0REd" alt="" width="563"><figcaption></figcaption></figure></div>

Workflows, permissions, reporting, and integrations frequently evaluate or modify <code class="expression">space.vars.entities</code>. Understanding how <code class="expression">space.vars.entities</code> behave is important when designing scalable data models and making informed architectural decisions.

### System Behaviors

The following behaviors describe how <code class="expression">space.vars.entities</code> operate across the platform:

* **Store field values:** Each <code class="expression">space.vars.entity</code> contains the data entered for a specific business entity. When values are created, updated, or cleared, the <code class="expression">space.vars.entity</code> reflects the current state while maintaining an auditable history of changes through system-managed timestamps and timeline activity.
* **Include system-managed attributes:** Every <code class="expression">space.vars.entity</code> contains system fields such as unique identifiers, created and modified timestamps, and ownership or association references. These ensure traceability and operational integrity.
* **Follow a defined lifecycle:** <code class="expression">space.vars.entities</code> are created, updated, related, automated upon, archived, and potentially unarchived. Archiving removes a <code class="expression">space.vars.entity</code> from active views while preserving history. Restoration reactivates it without data loss.
* **Generate timeline activity:** Changes create timeline entries that show what changed and who initiated the change, supporting governance and collaboration.
* **Enforce identifier constraints:** Each <code class="expression">space.vars.entity</code> must satisfy object-level uniqueness requirements to prevent duplication conflicts and maintain referential integrity.
* **Inherit visibility through associations:** Direct and indirect associations, evaluated alongside permissions, determine who can view or modify a <code class="expression">space.vars.entity</code>.

For more information, see [Records Data Model](/docs/concepts/objects/records/records-data-model).

***

## Why Records Matter

<code class="expression">space.vars.entities</code> are the operational foundation of the platform’s data model and support core platform behaviors, including:

* Activate object schemas
* Power <code class="expression">space.vars.automations</code>
* Enable reporting and analytics
* Support permission models and governance
* Serve as the foundation for integrations and APIs

Poorly designed <code class="expression">space.vars.entity</code> strategies create downstream complexity. Thoughtful <code class="expression">space.vars.entity</code> design supports scalability, data integrity, and long-term maintainability.

***

## Object Records vs Contact Records

While <code class="expression">space.vars.object</code> <code class="expression">space.vars.entities</code> and <code class="expression">space.vars.contact</code> <code class="expression">space.vars.entities</code> behave consistently, there are several important distinctions:

| Aspect                                                                 | Object Records                                                            | Contact Records                                                       |
| ---------------------------------------------------------------------- | ------------------------------------------------------------------------- | --------------------------------------------------------------------- |
| Foundational Record Model                                              | Yes                                                                       | Yes                                                                   |
| Supports Custom Fields                                                 | Yes                                                                       | Yes                                                                   |
| Participates in Relationships                                          | Yes                                                                       | Yes                                                                   |
| Participates in <code class="expression">space.vars.automations</code> | Yes                                                                       | Yes                                                                   |
| Primary Identifier                                                     | <code class="expression">space.vars.entity</code> Name                    | Email                                                                 |
| Minimum Data Requirements                                              | Defined by the <code class="expression">space.vars.object</code>'s Schema | At least one identifying field (such as name, email, or mobile phone) |
| Communication-Specific Behavior                                        | No                                                                        | Yes (subscriptions, messaging history, email status)                  |

Despite these differences, <code class="expression">space.vars.contact</code> <code class="expression">space.vars.entities</code> remain <code class="expression">space.vars.entities</code> within the same underlying data model. They store values, participate in <code class="expression">space.vars.automations</code>, respect permissions, and support API operations in the same way as other <code class="expression">space.vars.object</code> <code class="expression">space.vars.entities</code>.

For deeper guidance specific to contact behavior and communication features, see [Contacts Core Concepts](/docs/concepts/objects/contacts/contacts-core-concepts).

***

## How Records Are Used

<code class="expression">space.vars.entities</code> are the data around which business processes are organized.

Common patterns include:

* Managing customers, deals, policies, assets, or projects
* Tracking lifecycle progression across defined stages
* Associating related data across <code class="expression">space.vars.objects</code>
* Triggering <code class="expression">space.vars.automation</code> based on <code class="expression">space.vars.entity</code> changes
* Supporting collaboration through shared visibility

***

## Key Use Cases

The <code class="expression">space.vars.entity</code> model supports diverse industries by enabling structured, operational data management around real-world entities. These examples illustrate the flexibility of the <code class="expression">space.vars.entity</code> model across industries. The underlying behavior remains consistent while adapting to specific business contexts.

### Industry Examples

{% tabs %}
{% tab title="Insurance" %}

#### Insurance Teams Managing Policy and Operational Records

<code class="expression">space.vars.entities</code> enable insurance platforms to manage policies, claims, applications, and related operational data as structured, traceable entities.

Insurance teams use <code class="expression">space.vars.entities</code> to capture lifecycle-driven data, associate related entities, and support compliance and servicing workflows.

Examples include:

* Creating Policy <code class="expression">space.vars.entities</code> to store structured data such as policy number, coverage type, effective dates, premium amount, and status
* Managing Claim <code class="expression">space.vars.entities</code> with loss details, incident dates, adjuster assignments, reserve amounts, and claim status
* Associating Policy <code class="expression">space.vars.entities</code> to agents, carriers, accounts, and related claims
* Tracking renewals through workflow-driven status progression

**How Records Help:**

* Maintain consistent operational data across policy lifecycles
* Enable structured relationships between policies, claims, agents, and accounts
* Support reporting and forecasting based on standardized field values
* Power automation such as renewal creation or claim escalation <code class="expression">space.vars.automations</code>
  {% endtab %}

{% tab title="Healthcare" %}

#### Healthcare Organizations Managing Patient and Care Records

<code class="expression">space.vars.entities</code> enable healthcare teams to organize patient data, care interactions, and provider relationships within a structured and governed framework.

Healthcare teams use <code class="expression">space.vars.entities</code> to maintain accurate engagement histories, manage lifecycle status, and coordinate care-related activities.

Examples include:

* Managing Patient <code class="expression">space.vars.entities</code> with identifying information, status, and care milestones
* Associating care interactions, providers, and treatment <code class="expression">space.vars.entities</code>
* Tracking engagement progression across intake, treatment, and follow-up stages

**How Records Help:**

* Centralize patient-related operational data
* Maintain traceable care history through timeline activity
* Support regulatory compliance through auditable patient record history and controlled data access
* Enable reporting across patient populations and care stages
  {% endtab %}

{% tab title="Financial Services" %}

#### Financial Services Teams Managing Client and Portfolio Records

<code class="expression">space.vars.entities</code> allow financial services organizations to manage client relationships, engagements, and portfolio activity in a structured, auditable format.

Financial teams use <code class="expression">space.vars.entities</code> to monitor lifecycle progression, enforce governance standards, and support advisor collaboration.

Examples include:

* Managing Client <code class="expression">space.vars.entities</code> with profile, engagement, and relationship data
* Associating advisors, portfolios, and related financial accounts
* Tracking milestones such as onboarding, review cycles, and compliance checkpoints

**How Records Help:**

* Establish structured client data models
* Support regulatory oversight through traceable record history and auditable field changes
* Enable relationship-driven reporting across accounts and advisors
* Power automation tied to engagement milestones or portfolio events
  {% endtab %}
  {% endtabs %}

***

## What’s Next

Continue to [Records Data Model](/docs/concepts/objects/records/records-data-model) to explore the architectural structure behind <code class="expression">space.vars.entity</code> storage and relationships or explore any of the topics below:

<details>

<summary>Related Topics</summary>

* [Records](/docs/concepts/objects/records)
* [Records Data Model](/docs/concepts/objects/records/records-data-model)&#x20;
* Team Interactions in Records **(Coming Soon)**
* Record Permissions **(Coming Soon)**
* [Records APIs](/docs/concepts/objects/records/records-apis)

</details>


# Records Data Model

Explore the Kizen Records Data Model and learn how Records, fields, identifiers, relationships, and permissions support scalable data architecture and API-driven integrations.

{% hint style="success" %}
**Audience:** Developers, Solution Architects, Technical Integrators

**Purpose:** Explains how the <code class="expression">space.vars.entities</code> Data Model structures, identifies, relates, and governs operational business data across the platform.
{% endhint %}

## Overview

The <code class="expression">space.vars.entities</code> define how operational business data is structured, identified, related, and governed across the platform.

This page defines the architectural components of <code class="expression">space.vars.entity</code> management, including identifiers, field values, relationships, associations, and governing constraints. It builds on concepts introduced in [Records Core Concepts](/docs/concepts/objects/records/records-core-concepts)**.**

### How Records Are Identified

Every <code class="expression">space.vars.entity</code> must have a unique identifier within its <code class="expression">space.vars.object</code>. This ensures <code class="expression">space.vars.entities</code> can be reliably retrieved, updated, and referenced across workflows, reporting, and integrations.

#### Primary Identifiers

For most <code class="expression">space.vars.objects</code>, the **Record Name** serves as the primary identifier for each <code class="expression">space.vars.entity</code>. It must be unique within the <code class="expression">space.vars.object</code> and is used in lookup, upsert, and integration scenarios.

For Contact <code class="expression">space.vars.entities</code>, the primary identifier is **email**. Because <code class="expression">space.vars.contacts</code> are communication-oriented, email functions as both a contact and a unique identity key, while still operating within the same <code class="expression">space.vars.entity</code> model.

#### API-Facing Identifiers

While <code class="expression">space.vars.entity</code> names and email addresses function as primary business identifiers, the API uses system-generated identifiers for <code class="expression">space.vars.entity</code>-level operations.

* **Record ID:** System-generated at <code class="expression">space.vars.entity</code> creation, immutable, and globally unique. Used for retrieve, update, and archive operations, and serves as the authoritative identifier in API interactions.
* **Object Identifier:** <code class="expression">space.vars.entities</code> are scoped within an <code class="expression">space.vars.object</code> and may be referenced using either the <code class="expression">space.vars.object</code> API name or the <code class="expression">space.vars.object</code> ID when performing API operations.
* **Lookup and Upsert Identifiers:** <code class="expression">space.vars.entity</code> Name is used for most <code class="expression">space.vars.object</code> <code class="expression">space.vars.entities</code>, and email is used for Contact <code class="expression">space.vars.entities</code>. These operations rely on <code class="expression">space.vars.object</code>-level uniqueness constraints and are subject to conflict-handling rules.
* **Field Identifiers:** API responses reference fields by field ID or field API name. Integrations should rely on stable identifiers rather than assume fixed field structures.

***

## Record Lifecycle

The <code class="expression">space.vars.entity</code> lifecycle governs how stored business data is created, modified, archived, and restored. Unlike <code class="expression">space.vars.object</code> lifecycle changes, <code class="expression">space.vars.entity</code> lifecycle events operate directly on stored data.

* **Record created → data instance established:** Creating a <code class="expression">space.vars.entity</code> stores a new instance of structured data within an <code class="expression">space.vars.object</code>. At this stage, the <code class="expression">space.vars.entity</code> receives a system-generated UUID and becomes subject to schema validation, permissions, and lifecycle tracking.
* **Record updated → values modified:** Updating a <code class="expression">space.vars.entity</code> modifies stored field values in accordance with schema validation rules. Changes generate timeline activity and update system-managed attributes such as modified timestamps.
* **Record archived → removed from active operations:** Archiving a <code class="expression">space.vars.entity</code> removes it from active operational views while preserving stored data and historical activity. The <code class="expression">space.vars.entity</code> remains retrievable unless permanently deleted.
* **Record restored → operational state reactivated:** Restoring an archived <code class="expression">space.vars.entity</code> returns it to active status without altering stored values or historical context.

***

## Data Structure

The <code class="expression">space.vars.entities</code> Data Model organizes operational data around several structural components that govern how <code class="expression">space.vars.entities</code> store values, relate to other <code class="expression">space.vars.entities</code>, and behave within the system.

<div data-with-frame="true"><figure><img src="/files/SThe5vssXq2Iz1eivxzV" alt="" width="563"><figcaption></figcaption></figure></div>

### Record Fields

Each <code class="expression">space.vars.entity</code> stores field values defined by its <code class="expression">space.vars.object</code>’s schema.

Fields determine what data can exist on a <code class="expression">space.vars.entity</code> and how that data behaves.

* **System fields** provide identifiers, timestamps, ownership metadata, and lifecycle tracking.
* **Custom fields** capture business-specific data and may include validation rules, selectable options, relationships, or calculated values.

Field types influence:

* Validation and allowable values
* <code class="expression">space.vars.automation</code> triggers
* Reporting and filtering
* Integration payload structure

Schema-aware integrations must account for field configuration and data type behavior.

For detailed configuration guidance, see [Custom Fields](/docs/concepts/objects/custom-fields).

### Record Relationships

<code class="expression">space.vars.entities</code> relate across <code class="expression">space.vars.objects</code> through defined relationships that enable coordinated data behavior.

Relationships may represent:

* Parent-child structures
* Many-to-many connections
* Operational dependencies

Relational modeling allows organizations to:

* Link policies to claims
* Associate accounts with contacts
* Connect assets to locations
* Tie projects to milestones

Relationships support navigation, structured reporting, workflow coordination, cross-<code class="expression">space.vars.object</code> <code class="expression">space.vars.automations</code>, and inherited access evaluation. When modeling relationships, consider long-term scalability, reporting needs, and permission implications.

For configuration guidance, see [Object Relationships](/docs/concepts/objects/object-configuration/object-relationships).

### Record Governance & Permissions

The platform enforces structural safeguards that govern <code class="expression">space.vars.entity</code> behavior and protect data integrity.

Examples include:

* Uniqueness requirements within <code class="expression">space.vars.object</code> scope
* Required field enforcement
* Permission-based action constraints
* Action constraints such as archiving and restoration permissions
* License-based limits on <code class="expression">space.vars.entity</code> volume per <code class="expression">space.vars.object</code>

These constraints maintain consistency, enforce validation, and ensure predictable operational behavior at scale.

For more information, see [Record Permissions](/docs/concepts/objects/records/record-permissions)**.**

***

## Schemas

<code class="expression">space.vars.entity</code> behavior is governed by the <code class="expression">space.vars.object</code> schema, which defines how data is validated, structured, and enforced across <code class="expression">space.vars.entity</code> operations.

## The EntityRecordAddRequest object

```json
{"openapi":"3.0.3","info":{"title":"Kizen API","version":"1.0.0"},"components":{"schemas":{"EntityRecordAddRequest":{"type":"object","properties":{"fields":{"type":"array","items":{"$ref":"#/components/schemas/FieldRequest"}},"unarchive":{"nullable":true,"oneOf":[{"$ref":"#/components/schemas/UnarchiveEnum"},{"$ref":"#/components/schemas/NullEnum"}]}},"required":["fields"]},"FieldRequest":{"type":"object","properties":{"id":{"type":"string","format":"uuid","nullable":true,"description":"ID of the field, can be used instead of field name."},"name":{"type":"string","nullable":true,"minLength":1,"description":"Name of the field, can be used instead of field ID."},"value":{"nullable":true,"description":"Value to be set, this is required for fields that do not allow multiple values."},"add_values":{"type":"array","items":{},"nullable":true,"description":"Values to be added, applicable only for fields that allow multiple values."},"remove_values":{"type":"array","items":{},"nullable":true,"description":"Values to be removed, applicable only for fields that allow multiple values."}}},"UnarchiveEnum":{"enum":["prompt","unarchive","overwrite"],"type":"string","description":"* `prompt` - prompt\n* `unarchive` - unarchive\n* `overwrite` - overwrite"},"NullEnum":{"enum":[null]}}}}
```

## The EntityRecordDetail object

```json
{"openapi":"3.0.3","info":{"title":"Kizen API","version":"1.0.0"},"components":{"schemas":{"EntityRecordDetail":{"type":"object","properties":{"object_type":{"type":"string"},"num_upcoming_activities":{"type":"integer"},"fields":{"$ref":"#/components/schemas/Fields"},"id":{"type":"string","format":"uuid"},"client_info":{"$ref":"#/components/schemas/ClientInfo"},"access":{"$ref":"#/components/schemas/AccessSerpy"},"num_associated_team_members":{"type":"integer"},"lead_source_types":{"type":"array","items":{"$ref":"#/components/schemas/LeadSourceType"}}},"required":["access","client_info","fields","id","lead_source_types","num_associated_team_members","num_upcoming_activities","object_type"]},"Fields":{"type":"object","properties":{"id":{"$ref":"#/components/schemas/SerializedFieldValueDict"}},"required":["id"]},"SerializedFieldValueDict":{"type":"object","properties":{"id":{"type":"string"},"field_type":{"type":"string"},"display_name":{"type":"string"},"value":{"type":"object","additionalProperties":{}}},"required":["display_name","field_type","id","value"]},"ClientInfo":{"type":"object","properties":{"num_addresses_v2":{"type":"integer"},"display_name":{"type":"string"},"email_on_suppression_list":{"type":"boolean"}},"required":["display_name","email_on_suppression_list","num_addresses_v2"]},"AccessSerpy":{"type":"object","properties":{"view":{"type":"boolean"},"edit":{"type":"boolean"},"remove":{"type":"boolean"}},"required":["edit","remove","view"]},"LeadSourceType":{"type":"object","properties":{"value":{"$ref":"#/components/schemas/ValueEnum"},"label":{"type":"string"}},"required":["label","value"]},"ValueEnum":{"enum":["organic_search","direct_traffic","site_referral","facebook_ads","google_ads","social","paid_social","utm","custom"],"type":"string","description":"* `organic_search` - Organic Search\n* `direct_traffic` - Direct Traffic\n* `site_referral` - Site Referral\n* `facebook_ads` - Facebook Ads\n* `google_ads` - Google Ads\n* `social` - Social\n* `paid_social` - Paid Social\n* `utm` - UTM\n* `custom` - Custom"}}}}
```

## The EntityRecordList object

```json
{"openapi":"3.0.3","info":{"title":"Kizen API","version":"1.0.0"},"components":{"schemas":{"EntityRecordList":{"type":"object","properties":{"object_type":{"type":"string"},"fields":{"$ref":"#/components/schemas/Fields"},"id":{"type":"string","format":"uuid"},"client_info":{"$ref":"#/components/schemas/ClientInfo"},"access":{"$ref":"#/components/schemas/AccessSerpy"}},"required":["access","client_info","fields","id","object_type"]},"Fields":{"type":"object","properties":{"id":{"$ref":"#/components/schemas/SerializedFieldValueDict"}},"required":["id"]},"SerializedFieldValueDict":{"type":"object","properties":{"id":{"type":"string"},"field_type":{"type":"string"},"display_name":{"type":"string"},"value":{"type":"object","additionalProperties":{}}},"required":["display_name","field_type","id","value"]},"ClientInfo":{"type":"object","properties":{"num_addresses_v2":{"type":"integer"},"display_name":{"type":"string"},"email_on_suppression_list":{"type":"boolean"}},"required":["display_name","email_on_suppression_list","num_addresses_v2"]},"AccessSerpy":{"type":"object","properties":{"view":{"type":"boolean"},"edit":{"type":"boolean"},"remove":{"type":"boolean"}},"required":["edit","remove","view"]}}}}
```

## The EntityRecordUpdateRequest object

```json
{"openapi":"3.0.3","info":{"title":"Kizen API","version":"1.0.0"},"components":{"schemas":{"EntityRecordUpdateRequest":{"type":"object","properties":{"fields":{"type":"array","items":{"$ref":"#/components/schemas/FieldRequest"}},"archived_conflict":{"nullable":true,"description":"Updates the identifier of matching archived record to not raise a conflict.\n\n* `overwrite` - overwrite","oneOf":[{"$ref":"#/components/schemas/ArchivedConflictEnum"},{"$ref":"#/components/schemas/NullEnum"}]}},"required":["fields"]},"FieldRequest":{"type":"object","properties":{"id":{"type":"string","format":"uuid","nullable":true,"description":"ID of the field, can be used instead of field name."},"name":{"type":"string","nullable":true,"minLength":1,"description":"Name of the field, can be used instead of field ID."},"value":{"nullable":true,"description":"Value to be set, this is required for fields that do not allow multiple values."},"add_values":{"type":"array","items":{},"nullable":true,"description":"Values to be added, applicable only for fields that allow multiple values."},"remove_values":{"type":"array","items":{},"nullable":true,"description":"Values to be removed, applicable only for fields that allow multiple values."}}},"ArchivedConflictEnum":{"enum":["overwrite"],"type":"string","description":"* `overwrite` - overwrite"},"NullEnum":{"enum":[null]}}}}
```

## The EntityRecordUpsertRequest object

```json
{"openapi":"3.0.3","info":{"title":"Kizen API","version":"1.0.0"},"components":{"schemas":{"EntityRecordUpsertRequest":{"type":"object","properties":{"lookup_value":{"type":"string","minLength":1,"description":"Value to match the entity record (name for custom objects, email for contacts)."},"oncreate_unarchive":{"nullable":true,"description":"Behavior when creating and a matching archived record exists.\n\n* `prompt` - prompt\n* `unarchive` - unarchive\n* `overwrite` - overwrite","oneOf":[{"$ref":"#/components/schemas/OncreateUnarchiveEnum"},{"$ref":"#/components/schemas/NullEnum"}]},"onupdate_archived_conflict":{"nullable":true,"description":"Updates the identifier of matching archived record to not raise a conflict during update.\n\n* `overwrite` - overwrite","oneOf":[{"$ref":"#/components/schemas/OnupdateArchivedConflictEnum"},{"$ref":"#/components/schemas/NullEnum"}]}},"required":["lookup_value"]},"OncreateUnarchiveEnum":{"enum":["prompt","unarchive","overwrite"],"type":"string","description":"* `prompt` - prompt\n* `unarchive` - unarchive\n* `overwrite` - overwrite"},"NullEnum":{"enum":[null]},"OnupdateArchivedConflictEnum":{"enum":["overwrite"],"type":"string","description":"* `overwrite` - overwrite"}}}}
```

## The PatchedEntityRecordUpdateRequest object

```json
{"openapi":"3.0.3","info":{"title":"Kizen API","version":"1.0.0"},"components":{"schemas":{"PatchedEntityRecordUpdateRequest":{"type":"object","properties":{"fields":{"type":"array","items":{"$ref":"#/components/schemas/FieldRequest"}},"archived_conflict":{"nullable":true,"description":"Updates the identifier of matching archived record to not raise a conflict.\n\n* `overwrite` - overwrite","oneOf":[{"$ref":"#/components/schemas/ArchivedConflictEnum"},{"$ref":"#/components/schemas/NullEnum"}]}}},"FieldRequest":{"type":"object","properties":{"id":{"type":"string","format":"uuid","nullable":true,"description":"ID of the field, can be used instead of field name."},"name":{"type":"string","nullable":true,"minLength":1,"description":"Name of the field, can be used instead of field ID."},"value":{"nullable":true,"description":"Value to be set, this is required for fields that do not allow multiple values."},"add_values":{"type":"array","items":{},"nullable":true,"description":"Values to be added, applicable only for fields that allow multiple values."},"remove_values":{"type":"array","items":{},"nullable":true,"description":"Values to be removed, applicable only for fields that allow multiple values."}}},"ArchivedConflictEnum":{"enum":["overwrite"],"type":"string","description":"* `overwrite` - overwrite"},"NullEnum":{"enum":[null]}}}}
```

***

## Additional Information

<details>

<summary>Supported APIs</summary>

The following APIs support <code class="expression">space.vars.entity</code> data management:

* [Adding Records via API](/docs/concepts/objects/records/records-apis/add-records-api)
* [Manage Records by ID API](/docs/concepts/objects/records/records-apis/manage-records-by-id-api)&#x20;
* [Retrieving a Record by Name or Email via API](/docs/concepts/objects/records/records-apis/manage-records-by-id-api#retrieve-a-record-schema)&#x20;
* [Create or Update Records (Upsert) API](/docs/concepts/objects/records/records-apis/create-or-update-records-upsert-api)

See the API documentation for endpoint-level detail.

</details>

<details>

<summary>Error States</summary>

The Records Data Model may produce predictable error conditions such as:

* Duplicate identifier conflicts
* Identifier collisions during lookup or upsert
* Permission-related access failures
* Validation errors due to schema rules

Understanding these conditions helps anticipate operational constraints without requiring troubleshooting steps.

</details>

***

## What’s Next

Continue to [Record Permissions](/docs/concepts/objects/records/record-permissions) to understand how access is governed across <code class="expression">space.vars.entities</code>, or see any of the following topics below:

<details>

<summary>Related Topics</summary>

* [Records Core Concepts](/docs/concepts/objects/records/records-core-concepts)
* [Team Interactions in Records](/docs/concepts/objects/records/team-interactions-in-records)
* [Records Permissions](/docs/concepts/objects/records/record-permissions)
* [Records APIs](/docs/concepts/objects/records/records-apis)&#x20;

</details>


# Records APIs

Use Record APIs to create, retrieve, update, search, archive, and upsert records across objects and contacts with consistent REST endpoints and structured field data.

## Overview

<code class="expression">space.vars.entity</code> APIs allow developers to programmatically create, retrieve, update, search, archive, unarchive, and manage records across all objects in the platform.&#x20;

These endpoints operate on <code class="expression">space.vars.entity</code> instances are used for synchronization, automation, data migration, middleware integrations, and other scalable application workflows.&#x20;

### How Object and Contact Records Are Exposed Programmatically

All <code class="expression">space.vars.entities</code>, including <code class="expression">space.vars.contacts</code>, follow the same underlying <code class="expression">space.vars.entity</code> model and are exposed through consistent REST endpoints:

```
/api/records/{object_identifier}/{entity_id}
```

#### Object Records

<code class="expression">space.vars.object</code> <code class="expression">space.vars.entities</code> are referenced using:

* `object_identifier`**:** the <code class="expression">space.vars.object</code>’s API name
* `entity_id`**:** the <code class="expression">space.vars.entity</code>’s UUID

<code class="expression">space.vars.object</code> <code class="expression">space.vars.entity</code> responses include:

* A <code class="expression">space.vars.entity</code> identifier
* The <code class="expression">space.vars.object</code> type
* A structured `fields` <code class="expression">space.vars.object</code> containing field values
* Additional metadata depending on the endpoint

#### Contact Records

<code class="expression">space.vars.contacts</code> use the same underlying <code class="expression">space.vars.entity</code> model and endpoints as other <code class="expression">space.vars.object</code> <code class="expression">space.vars.entities</code>.

The primary difference is identifier behavior: <code class="expression">space.vars.contacts</code> can be retrieved or matched using email in addition to their UUID. In upsert and lookup operations, email typically functions as the unique identifier, whereas <code class="expression">space.vars.objects</code> use the <code class="expression">space.vars.entity</code> name.

Aside from this identifier distinction, <code class="expression">space.vars.contacts</code> follow the same CRUD lifecycle and response structure as other <code class="expression">space.vars.entities</code>.

#### Field Values and Structure

In <code class="expression">space.vars.entity</code> detail and list responses, field values are returned in a structured `fields` <code class="expression">space.vars.object</code> keyed by field ID. Relationship fields are represented as structured <code class="expression">space.vars.objects</code> rather than flat values.

Response structure varies by endpoint. Some operations return full <code class="expression">space.vars.entity</code> <code class="expression">space.vars.objects</code>, while others return partial data, paginated lists, or specialized value sets (such as the field-values endpoint).

When field data is included, its consistent structured format allows integrations to perform partial updates, traverse relationships, and implement schema-aware synchronization predictably across <code class="expression">space.vars.object</code> types.

### When to Use These APIs

Use <code class="expression">space.vars.entity</code> APIs when <code class="expression">space.vars.entity</code> operations must be automated, repeatable, and programmatically controlled rather than performed through the UI.

Common use cases include:

* Synchronizing data across systems
* Creating or updating <code class="expression">space.vars.entities</code> from external events (such as web forms or payments)
* Handling lifecycle changes
* Running dynamic searches
* Implementing upsert logic to prevent duplicates and maintain consistent integration behavior.

***

## API Topics in This Section

The following <code class="expression">space.vars.entity</code> API topics build on the concepts introduced here:

* [Add Records API](/docs/concepts/objects/records/records-apis/add-records-api)
* [Manage Records by ID API](/docs/concepts/objects/records/records-apis/manage-records-by-id-api)
* [Lookup Record API](/docs/concepts/objects/records/records-apis/lookup-record-api)
* [Search Records API](/docs/concepts/objects/records/records-apis/search-records-api)
* [Create or Update Records (Upsert) API](/docs/concepts/objects/records/records-apis/create-or-update-records-upsert-api)

These topics focus on working directly with <code class="expression">space.vars.entity</code> instances, covering the full CRUD lifecycle, lookup behavior, search, and upsert patterns used in scalable integrations.

***

## What’s Next

These APIs provide a complete toolkit for building reliable, scalable integrations around <code class="expression">space.vars.entity</code> data. Check each of them out below:

<details>

<summary>Related Topics</summary>

* [Add Records API](/docs/concepts/objects/records/records-apis)
* [Manage Records by ID API](/docs/concepts/objects/records/records-apis/manage-records-by-id-api)
* [Lookup Record API](/docs/concepts/objects/records/records-apis/lookup-record-api)
* [Search Records API](/docs/concepts/objects/records/records-apis/search-records-api)
* [Create or Update Records (Upsert) API](/docs/concepts/objects/records/records-apis/create-or-update-records-upsert-api)

</details>


# Add Records API

Use the Add Records API to create new object records via REST with schema validation, required field enforcement, and workflow activation.

{% hint style="success" %}
**Audience:** Developers, Integration Engineers, Solution Architects

<code class="expression">space.vars.entity</code>s within an object using the Add <code class="expression">space.vars.entities</code> endpoint and how schema configuration governs <code class="expression">space.vars.entity</code> creation.
{% endhint %}

## Overview

Use the **Add Records** endpoint to create new <code class="expression">space.vars.entities</code> within a specified <code class="expression">space.vars.object</code> via API.

<code class="expression">space.vars.entity</code> creation is schema-driven. Submitted values must align with the <code class="expression">space.vars.object</code>’s configured structure, including required fields, field types, validation rules, and selectable value constraints. Requests that do not conform to the schema will fail validation.

This page builds on concepts introduced in [Records Core Concepts](/docs/concepts/objects/records/records-core-concepts) and the [Object Data Model](/docs/concepts/objects/object-data-model).

### Why Use This API

Use the Add <code class="expression">space.vars.entities</code> endpoint when you need to create entirely new <code class="expression">space.vars.entities</code> programmatically.

Common scenarios include:

* Creating <code class="expression">space.vars.entities</code> from external systems (CRM, custom apps)
* Supporting event-driven workflows
* Migrating data into the platform
* Automating operational data capture
* Generating <code class="expression">space.vars.entities</code> through backend integrations
* Creating pipeline, standard, or <code class="expression">space.vars.object</code> <code class="expression">space.vars.entities</code> at scale

This endpoint is appropriate when:

* The <code class="expression">space.vars.entity</code> does not already exist
* You intend to create a net-new <code class="expression">space.vars.entity</code>

Duplicate prevention is built-in with <code class="expression">space.vars.Kizen\_company\_name</code>, as every <code class="expression">space.vars.entity</code> must have a unique identifier, which prevents duplicates from being created. If you need to Lookup a <code class="expression">space.vars.entity</code> or Create a <code class="expression">space.vars.entity</code> or Update a <code class="expression">space.vars.entity</code> via Upsert, check out these APIs:

* [Lookup Record API](/docs/concepts/objects/records/records-apis/lookup-record-api)**:** Check for existing <code class="expression">space.vars.entity</code>s before creation
* [Create or Update Records (Upsert) API](/docs/concepts/objects/records/records-apis/create-or-update-records-upsert-api)**:** Create or update in a single request

### Add Records API Behavior

Use this endpoint to create new <code class="expression">space.vars.entities</code> within a specified <code class="expression">space.vars.object</code>. It:

* Creates a new <code class="expression">space.vars.entity</code> based on the <code class="expression">space.vars.object</code>’s current schema configuration
* Validates required fields, field types, validation rules, and selectable values at submission
* Rejects unsupported or invalid values and does not create the <code class="expression">space.vars.entity</code> if validation fails
* Enforces <code class="expression">space.vars.object</code>-, <code class="expression">space.vars.entity</code>-, and field-level permissions before allowing creation
* Immediately activates <code class="expression">space.vars.automations</code>, reporting, and permission evaluation upon success
* Does not modify existing <code class="expression">space.vars.entities</code>

***

## Add Records API Endpoint

Want to try the API out? Visit our [Swagger](https://app.go.kizen.com/api/docs/public/swagger#/records/records_add_create) docs.

## POST /api/records/{object\_identifier}/add

> Create entity record

```json
{"openapi":"3.0.3","info":{"title":"Kizen API","version":"1.0.0"},"security":[{"businessId":[],"userId":[],"apiKey":[]}],"components":{"securitySchemes":{"businessId":{"type":"apiKey","in":"header","name":"X-BUSINESS-ID"}},"schemas":{"EntityRecordAddRequest":{"type":"object","properties":{"fields":{"type":"array","items":{"$ref":"#/components/schemas/FieldRequest"}},"unarchive":{"nullable":true,"oneOf":[{"$ref":"#/components/schemas/UnarchiveEnum"},{"$ref":"#/components/schemas/NullEnum"}]}},"required":["fields"]},"FieldRequest":{"type":"object","properties":{"id":{"type":"string","format":"uuid","nullable":true,"description":"ID of the field, can be used instead of field name."},"name":{"type":"string","nullable":true,"minLength":1,"description":"Name of the field, can be used instead of field ID."},"value":{"nullable":true,"description":"Value to be set, this is required for fields that do not allow multiple values."},"add_values":{"type":"array","items":{},"nullable":true,"description":"Values to be added, applicable only for fields that allow multiple values."},"remove_values":{"type":"array","items":{},"nullable":true,"description":"Values to be removed, applicable only for fields that allow multiple values."}}},"UnarchiveEnum":{"enum":["prompt","unarchive","overwrite"],"type":"string","description":"* `prompt` - prompt\n* `unarchive` - unarchive\n* `overwrite` - overwrite"},"NullEnum":{"enum":[null]},"EntityRecordDetail":{"type":"object","properties":{"object_type":{"type":"string"},"num_upcoming_activities":{"type":"integer"},"fields":{"$ref":"#/components/schemas/Fields"},"id":{"type":"string","format":"uuid"},"client_info":{"$ref":"#/components/schemas/ClientInfo"},"access":{"$ref":"#/components/schemas/AccessSerpy"},"num_associated_team_members":{"type":"integer"},"lead_source_types":{"type":"array","items":{"$ref":"#/components/schemas/LeadSourceType"}}},"required":["access","client_info","fields","id","lead_source_types","num_associated_team_members","num_upcoming_activities","object_type"]},"Fields":{"type":"object","properties":{"id":{"$ref":"#/components/schemas/SerializedFieldValueDict"}},"required":["id"]},"SerializedFieldValueDict":{"type":"object","properties":{"id":{"type":"string"},"field_type":{"type":"string"},"display_name":{"type":"string"},"value":{"type":"object","additionalProperties":{}}},"required":["display_name","field_type","id","value"]},"ClientInfo":{"type":"object","properties":{"num_addresses_v2":{"type":"integer"},"display_name":{"type":"string"},"email_on_suppression_list":{"type":"boolean"}},"required":["display_name","email_on_suppression_list","num_addresses_v2"]},"AccessSerpy":{"type":"object","properties":{"view":{"type":"boolean"},"edit":{"type":"boolean"},"remove":{"type":"boolean"}},"required":["edit","remove","view"]},"LeadSourceType":{"type":"object","properties":{"value":{"$ref":"#/components/schemas/ValueEnum"},"label":{"type":"string"}},"required":["label","value"]},"ValueEnum":{"enum":["organic_search","direct_traffic","site_referral","facebook_ads","google_ads","social","paid_social","utm","custom"],"type":"string","description":"* `organic_search` - Organic Search\n* `direct_traffic` - Direct Traffic\n* `site_referral` - Site Referral\n* `facebook_ads` - Facebook Ads\n* `google_ads` - Google Ads\n* `social` - Social\n* `paid_social` - Paid Social\n* `utm` - UTM\n* `custom` - Custom"},"ErrorResponse":{"type":"object","properties":{"non_field_errors":{"type":"array","items":{"type":"string"}},"fields":{"type":"array","items":{"$ref":"#/components/schemas/_FieldError"}}},"required":["fields"]},"_FieldError":{"type":"object","description":"This is only used for rendering the error response schema.","properties":{"id":{"type":"array","items":{"type":"string"}},"name":{"type":"array","items":{"type":"string"}},"value":{"oneOf":[{"type":"array","items":{"type":"string"}},{"type":"object","additionalProperties":{"type":"array","items":{"type":"string"}}}],"description":"Given the *incoming* primitive data, return the value for this field\nthat should be validated and transformed to a native value.","readOnly":true},"add_values":{"oneOf":[{"type":"array","items":{"type":"string"}},{"type":"object","additionalProperties":{"type":"array","items":{"type":"string"}}}],"readOnly":true},"remove_values":{"oneOf":[{"type":"array","items":{"type":"string"}},{"type":"object","additionalProperties":{"type":"array","items":{"type":"string"}}}],"readOnly":true}},"required":["add_values","remove_values","value"]}}},"paths":{"/api/records/{object_identifier}/add":{"post":{"operationId":"records_add_create","description":"Create entity record","parameters":[{"in":"path","name":"object_identifier","schema":{"type":"string"},"required":true}],"tags":["records"],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/EntityRecordAddRequest"}}},"required":true},"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/EntityRecordDetail"}}},"description":""},"400":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}},"description":""}}}}}}
```

***

### Add Records Schema

## The EntityRecordAddRequest object

```json
{"openapi":"3.0.3","info":{"title":"Kizen API","version":"1.0.0"},"components":{"schemas":{"EntityRecordAddRequest":{"type":"object","properties":{"fields":{"type":"array","items":{"$ref":"#/components/schemas/FieldRequest"}},"unarchive":{"nullable":true,"oneOf":[{"$ref":"#/components/schemas/UnarchiveEnum"},{"$ref":"#/components/schemas/NullEnum"}]}},"required":["fields"]},"FieldRequest":{"type":"object","properties":{"id":{"type":"string","format":"uuid","nullable":true,"description":"ID of the field, can be used instead of field name."},"name":{"type":"string","nullable":true,"minLength":1,"description":"Name of the field, can be used instead of field ID."},"value":{"nullable":true,"description":"Value to be set, this is required for fields that do not allow multiple values."},"add_values":{"type":"array","items":{},"nullable":true,"description":"Values to be added, applicable only for fields that allow multiple values."},"remove_values":{"type":"array","items":{},"nullable":true,"description":"Values to be removed, applicable only for fields that allow multiple values."}}},"UnarchiveEnum":{"enum":["prompt","unarchive","overwrite"],"type":"string","description":"* `prompt` - prompt\n* `unarchive` - unarchive\n* `overwrite` - overwrite"},"NullEnum":{"enum":[null]}}}}
```

***

## What’s Next

After creating <code class="expression">space.vars.entities</code>, you can use the Search <code class="expression">space.vars.entities</code> API to:

* Query <code class="expression">space.vars.entities</code> within an <code class="expression">space.vars.object</code> using filters, search terms, and pagination
* Retrieve <code class="expression">space.vars.entities</code> dynamically for validation, enrichment, or synchronization workflows
* Reference field identifiers when constructing search filters and payloads
* Use <code class="expression">space.vars.object</code> and field metadata to build schema-aware queries
* Combine <code class="expression">space.vars.entity</code> searches with <code class="expression">space.vars.automation</code> triggers, or downstream integrations

For more information, review the related <code class="expression">space.vars.entity</code> API topics below:

<details>

<summary>Related Topics</summary>

* [Manage Records by ID API](/docs/concepts/objects/records/records-apis/manage-records-by-id-api)
* [Lookup Record API](/docs/concepts/objects/records/records-apis/lookup-record-api)
* [Search Records API](/docs/concepts/objects/records/records-apis/search-records-api)
* [Create or Update Records (Upsert) API](/docs/concepts/objects/records/records-apis/create-or-update-records-upsert-api)

</details>


# Manage Records by ID API

Use Kizen’s Managing Records by ID APIs to retrieve, update, patch, archive, and list field values for records. Supports deterministic, ID-based record management and synchronization workflows.

{% hint style="success" %}
**Audience:** Developers and Solution Architects

**Purpose:** Explains how to use ID-based record management APIs to retrieve, update, partially update, archive, and manage paginated field values while enforcing validation, permissions, and lifecycle controls.
{% endhint %}

## Overview

Use the **Manage Records by ID** endpoints to retrieve, update, partially update, and archive existing <code class="expression">space.vars.entities</code> using their system-generated record IDs. You can use them to operate on a specific <code class="expression">space.vars.entity</code>’s current state, apply full or targeted changes, and manage lifecycle actions while preserving audit history.

These endpoints are designed for precise, ID-based <code class="expression">space.vars.entity</code> management. They enable external systems to synchronize <code class="expression">space.vars.entity</code> updates, enforce consistent data control, and retrieve paginated field values when selectable option sets are too large to return inline without relying on mutable business identifiers such as <code class="expression">space.vars.entity</code> name or email.

The material on this page builds on information covered in [Records Core Concepts](/docs/concepts/objects/records/records-core-concepts) and the [Records Data Model](/docs/concepts/objects/records/records-data-model).

### Why Use This API?

You can use the Managing <code class="expression">space.vars.entities</code> by ID endpoints when you need to:

* Synchronize <code class="expression">space.vars.entity</code> updates from an external system into <code class="expression">space.vars.Kizen\_company\_name</code>
* Retrieve the current state of a <code class="expression">space.vars.entity</code> before applying changes
* Update <code class="expression">space.vars.entity</code> field values in response to lifecycle events
* Apply targeted updates without sending a full <code class="expression">space.vars.entity</code> payload
* Archive <code class="expression">space.vars.entities</code> that are no longer active but must remain auditable
* Retrieve paginated selectable field values when option sets are too large to return inline

ID-based endpoints provide deterministic <code class="expression">space.vars.entity</code> control and are recommended once the <code class="expression">space.vars.entity</code> ID is known.

### Manage Records by ID API Behavior

Use these endpoints to retrieve, modify, and manage <code class="expression">space.vars.entities</code> using a system-generated <code class="expression">space.vars.entity</code> ID. They:

* **GET** retrieves a <code class="expression">space.vars.entity</code> and returns its current field values; use when evaluating the current <code class="expression">space.vars.entity</code> state before applying changes
* **PUT** updates a <code class="expression">space.vars.entity</code> using a full update pattern; use when replacing the complete <code class="expression">space.vars.entity</code> payload
* **PATCH** updates specific fields without replacing the full <code class="expression">space.vars.entity</code> payload; use for targeted changes
* **DELETE** archives a <code class="expression">space.vars.entity</code> while preserving stored data and audit history
* **GET (Field Values List)** returns a paginated set of selectable values when option sets are too large to return inline in the <code class="expression">space.vars.entity</code> detail response

All operations respect validation rules, permission constraints, and <code class="expression">space.vars.object</code>-level configuration.

***

## Manage Records by ID Endpoints

The following endpoints are included in the Managing Records by ID capability set:

### Retrieve a Record (GET)

Want to try the API out? Visit our [Swagger](https://app.go.kizen.com/api/docs/public/swagger#/records/records_retrieve) docs.

## GET /api/records/{object\_identifier}/{entity\_id}

> Get entity record by ID

```json
{"openapi":"3.0.3","info":{"title":"Kizen API","version":"1.0.0"},"security":[{"businessId":[],"userId":[],"apiKey":[]}],"components":{"securitySchemes":{"businessId":{"type":"apiKey","in":"header","name":"X-BUSINESS-ID"}},"schemas":{"EntityRecordDetail":{"type":"object","properties":{"object_type":{"type":"string"},"num_upcoming_activities":{"type":"integer"},"fields":{"$ref":"#/components/schemas/Fields"},"id":{"type":"string","format":"uuid"},"client_info":{"$ref":"#/components/schemas/ClientInfo"},"access":{"$ref":"#/components/schemas/AccessSerpy"},"num_associated_team_members":{"type":"integer"},"lead_source_types":{"type":"array","items":{"$ref":"#/components/schemas/LeadSourceType"}}},"required":["access","client_info","fields","id","lead_source_types","num_associated_team_members","num_upcoming_activities","object_type"]},"Fields":{"type":"object","properties":{"id":{"$ref":"#/components/schemas/SerializedFieldValueDict"}},"required":["id"]},"SerializedFieldValueDict":{"type":"object","properties":{"id":{"type":"string"},"field_type":{"type":"string"},"display_name":{"type":"string"},"value":{"type":"object","additionalProperties":{}}},"required":["display_name","field_type","id","value"]},"ClientInfo":{"type":"object","properties":{"num_addresses_v2":{"type":"integer"},"display_name":{"type":"string"},"email_on_suppression_list":{"type":"boolean"}},"required":["display_name","email_on_suppression_list","num_addresses_v2"]},"AccessSerpy":{"type":"object","properties":{"view":{"type":"boolean"},"edit":{"type":"boolean"},"remove":{"type":"boolean"}},"required":["edit","remove","view"]},"LeadSourceType":{"type":"object","properties":{"value":{"$ref":"#/components/schemas/ValueEnum"},"label":{"type":"string"}},"required":["label","value"]},"ValueEnum":{"enum":["organic_search","direct_traffic","site_referral","facebook_ads","google_ads","social","paid_social","utm","custom"],"type":"string","description":"* `organic_search` - Organic Search\n* `direct_traffic` - Direct Traffic\n* `site_referral` - Site Referral\n* `facebook_ads` - Facebook Ads\n* `google_ads` - Google Ads\n* `social` - Social\n* `paid_social` - Paid Social\n* `utm` - UTM\n* `custom` - Custom"}}},"paths":{"/api/records/{object_identifier}/{entity_id}":{"get":{"operationId":"records_retrieve","description":"Get entity record by ID","parameters":[{"in":"query","name":"detail_summary","schema":{"type":"boolean"},"description":"Include summary data in the response, including lead sources."},{"in":"path","name":"entity_id","schema":{"type":"string","pattern":"^[0-9a-fA-F]{8}\\-[0-9a-fA-F]{4}\\-[0-9a-fA-F]{4}\\-[0-9a-fA-F]{4}\\-[0-9a-fA-F]{12}$"},"required":true},{"in":"query","name":"field_category","schema":{"type":"string"},"description":"Comma separated category ids, to filter by field category.  Ignored when field_ids is present."},{"in":"query","name":"field_ids","schema":{"type":"string"},"description":"Comma separated field ids to include in response. If present but empty, it will return default fields only."},{"in":"query","name":"field_names","schema":{"type":"string"},"description":"Comma separated field names to include in response. If present but empty, it will return default fields only."},{"in":"query","name":"include_hidden_fields","schema":{"type":"boolean"},"description":"Include hidden fields in the response."},{"in":"path","name":"object_identifier","schema":{"type":"string"},"required":true}],"tags":["records"],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/EntityRecordDetail"}}},"description":""}}}}}}
```

### Update a Record (PUT)

Want to try the API out? Visit our [Swagger](https://app.go.kizen.com/api/docs/public/swagger#/records/records_update) docs.

## PUT /api/records/{object\_identifier}/{entity\_id}

> Update entity record

```json
{"openapi":"3.0.3","info":{"title":"Kizen API","version":"1.0.0"},"security":[{"businessId":[],"userId":[],"apiKey":[]}],"components":{"securitySchemes":{"businessId":{"type":"apiKey","in":"header","name":"X-BUSINESS-ID"}},"schemas":{"EntityRecordUpdateRequest":{"type":"object","properties":{"fields":{"type":"array","items":{"$ref":"#/components/schemas/FieldRequest"}},"archived_conflict":{"nullable":true,"description":"Updates the identifier of matching archived record to not raise a conflict.\n\n* `overwrite` - overwrite","oneOf":[{"$ref":"#/components/schemas/ArchivedConflictEnum"},{"$ref":"#/components/schemas/NullEnum"}]}},"required":["fields"]},"FieldRequest":{"type":"object","properties":{"id":{"type":"string","format":"uuid","nullable":true,"description":"ID of the field, can be used instead of field name."},"name":{"type":"string","nullable":true,"minLength":1,"description":"Name of the field, can be used instead of field ID."},"value":{"nullable":true,"description":"Value to be set, this is required for fields that do not allow multiple values."},"add_values":{"type":"array","items":{},"nullable":true,"description":"Values to be added, applicable only for fields that allow multiple values."},"remove_values":{"type":"array","items":{},"nullable":true,"description":"Values to be removed, applicable only for fields that allow multiple values."}}},"ArchivedConflictEnum":{"enum":["overwrite"],"type":"string","description":"* `overwrite` - overwrite"},"NullEnum":{"enum":[null]},"EntityRecordDetail":{"type":"object","properties":{"object_type":{"type":"string"},"num_upcoming_activities":{"type":"integer"},"fields":{"$ref":"#/components/schemas/Fields"},"id":{"type":"string","format":"uuid"},"client_info":{"$ref":"#/components/schemas/ClientInfo"},"access":{"$ref":"#/components/schemas/AccessSerpy"},"num_associated_team_members":{"type":"integer"},"lead_source_types":{"type":"array","items":{"$ref":"#/components/schemas/LeadSourceType"}}},"required":["access","client_info","fields","id","lead_source_types","num_associated_team_members","num_upcoming_activities","object_type"]},"Fields":{"type":"object","properties":{"id":{"$ref":"#/components/schemas/SerializedFieldValueDict"}},"required":["id"]},"SerializedFieldValueDict":{"type":"object","properties":{"id":{"type":"string"},"field_type":{"type":"string"},"display_name":{"type":"string"},"value":{"type":"object","additionalProperties":{}}},"required":["display_name","field_type","id","value"]},"ClientInfo":{"type":"object","properties":{"num_addresses_v2":{"type":"integer"},"display_name":{"type":"string"},"email_on_suppression_list":{"type":"boolean"}},"required":["display_name","email_on_suppression_list","num_addresses_v2"]},"AccessSerpy":{"type":"object","properties":{"view":{"type":"boolean"},"edit":{"type":"boolean"},"remove":{"type":"boolean"}},"required":["edit","remove","view"]},"LeadSourceType":{"type":"object","properties":{"value":{"$ref":"#/components/schemas/ValueEnum"},"label":{"type":"string"}},"required":["label","value"]},"ValueEnum":{"enum":["organic_search","direct_traffic","site_referral","facebook_ads","google_ads","social","paid_social","utm","custom"],"type":"string","description":"* `organic_search` - Organic Search\n* `direct_traffic` - Direct Traffic\n* `site_referral` - Site Referral\n* `facebook_ads` - Facebook Ads\n* `google_ads` - Google Ads\n* `social` - Social\n* `paid_social` - Paid Social\n* `utm` - UTM\n* `custom` - Custom"},"ErrorResponse":{"type":"object","properties":{"non_field_errors":{"type":"array","items":{"type":"string"}},"fields":{"type":"array","items":{"$ref":"#/components/schemas/_FieldError"}}},"required":["fields"]},"_FieldError":{"type":"object","description":"This is only used for rendering the error response schema.","properties":{"id":{"type":"array","items":{"type":"string"}},"name":{"type":"array","items":{"type":"string"}},"value":{"oneOf":[{"type":"array","items":{"type":"string"}},{"type":"object","additionalProperties":{"type":"array","items":{"type":"string"}}}],"description":"Given the *incoming* primitive data, return the value for this field\nthat should be validated and transformed to a native value.","readOnly":true},"add_values":{"oneOf":[{"type":"array","items":{"type":"string"}},{"type":"object","additionalProperties":{"type":"array","items":{"type":"string"}}}],"readOnly":true},"remove_values":{"oneOf":[{"type":"array","items":{"type":"string"}},{"type":"object","additionalProperties":{"type":"array","items":{"type":"string"}}}],"readOnly":true}},"required":["add_values","remove_values","value"]}}},"paths":{"/api/records/{object_identifier}/{entity_id}":{"put":{"operationId":"records_update","description":"Update entity record","parameters":[{"in":"path","name":"entity_id","schema":{"type":"string","pattern":"^[0-9a-fA-F]{8}\\-[0-9a-fA-F]{4}\\-[0-9a-fA-F]{4}\\-[0-9a-fA-F]{4}\\-[0-9a-fA-F]{12}$"},"required":true},{"in":"path","name":"object_identifier","schema":{"type":"string"},"required":true}],"tags":["records"],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/EntityRecordUpdateRequest"}}},"required":true},"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/EntityRecordDetail"}}},"description":""},"400":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}},"description":""}}}}}}
```

### Partial Update a Record (PATCH)

Want to try the API out? Visit our [Swagger](https://app.go.kizen.com/api/docs/public/swagger#/records/records_partial_update) docs.

## PATCH /api/records/{object\_identifier}/{entity\_id}

> Update entity record (partial)

```json
{"openapi":"3.0.3","info":{"title":"Kizen API","version":"1.0.0"},"security":[{"businessId":[],"userId":[],"apiKey":[]}],"components":{"securitySchemes":{"businessId":{"type":"apiKey","in":"header","name":"X-BUSINESS-ID"}},"schemas":{"PatchedEntityRecordUpdateRequest":{"type":"object","properties":{"fields":{"type":"array","items":{"$ref":"#/components/schemas/FieldRequest"}},"archived_conflict":{"nullable":true,"description":"Updates the identifier of matching archived record to not raise a conflict.\n\n* `overwrite` - overwrite","oneOf":[{"$ref":"#/components/schemas/ArchivedConflictEnum"},{"$ref":"#/components/schemas/NullEnum"}]}}},"FieldRequest":{"type":"object","properties":{"id":{"type":"string","format":"uuid","nullable":true,"description":"ID of the field, can be used instead of field name."},"name":{"type":"string","nullable":true,"minLength":1,"description":"Name of the field, can be used instead of field ID."},"value":{"nullable":true,"description":"Value to be set, this is required for fields that do not allow multiple values."},"add_values":{"type":"array","items":{},"nullable":true,"description":"Values to be added, applicable only for fields that allow multiple values."},"remove_values":{"type":"array","items":{},"nullable":true,"description":"Values to be removed, applicable only for fields that allow multiple values."}}},"ArchivedConflictEnum":{"enum":["overwrite"],"type":"string","description":"* `overwrite` - overwrite"},"NullEnum":{"enum":[null]},"EntityRecordDetail":{"type":"object","properties":{"object_type":{"type":"string"},"num_upcoming_activities":{"type":"integer"},"fields":{"$ref":"#/components/schemas/Fields"},"id":{"type":"string","format":"uuid"},"client_info":{"$ref":"#/components/schemas/ClientInfo"},"access":{"$ref":"#/components/schemas/AccessSerpy"},"num_associated_team_members":{"type":"integer"},"lead_source_types":{"type":"array","items":{"$ref":"#/components/schemas/LeadSourceType"}}},"required":["access","client_info","fields","id","lead_source_types","num_associated_team_members","num_upcoming_activities","object_type"]},"Fields":{"type":"object","properties":{"id":{"$ref":"#/components/schemas/SerializedFieldValueDict"}},"required":["id"]},"SerializedFieldValueDict":{"type":"object","properties":{"id":{"type":"string"},"field_type":{"type":"string"},"display_name":{"type":"string"},"value":{"type":"object","additionalProperties":{}}},"required":["display_name","field_type","id","value"]},"ClientInfo":{"type":"object","properties":{"num_addresses_v2":{"type":"integer"},"display_name":{"type":"string"},"email_on_suppression_list":{"type":"boolean"}},"required":["display_name","email_on_suppression_list","num_addresses_v2"]},"AccessSerpy":{"type":"object","properties":{"view":{"type":"boolean"},"edit":{"type":"boolean"},"remove":{"type":"boolean"}},"required":["edit","remove","view"]},"LeadSourceType":{"type":"object","properties":{"value":{"$ref":"#/components/schemas/ValueEnum"},"label":{"type":"string"}},"required":["label","value"]},"ValueEnum":{"enum":["organic_search","direct_traffic","site_referral","facebook_ads","google_ads","social","paid_social","utm","custom"],"type":"string","description":"* `organic_search` - Organic Search\n* `direct_traffic` - Direct Traffic\n* `site_referral` - Site Referral\n* `facebook_ads` - Facebook Ads\n* `google_ads` - Google Ads\n* `social` - Social\n* `paid_social` - Paid Social\n* `utm` - UTM\n* `custom` - Custom"},"ErrorResponse":{"type":"object","properties":{"non_field_errors":{"type":"array","items":{"type":"string"}},"fields":{"type":"array","items":{"$ref":"#/components/schemas/_FieldError"}}},"required":["fields"]},"_FieldError":{"type":"object","description":"This is only used for rendering the error response schema.","properties":{"id":{"type":"array","items":{"type":"string"}},"name":{"type":"array","items":{"type":"string"}},"value":{"oneOf":[{"type":"array","items":{"type":"string"}},{"type":"object","additionalProperties":{"type":"array","items":{"type":"string"}}}],"description":"Given the *incoming* primitive data, return the value for this field\nthat should be validated and transformed to a native value.","readOnly":true},"add_values":{"oneOf":[{"type":"array","items":{"type":"string"}},{"type":"object","additionalProperties":{"type":"array","items":{"type":"string"}}}],"readOnly":true},"remove_values":{"oneOf":[{"type":"array","items":{"type":"string"}},{"type":"object","additionalProperties":{"type":"array","items":{"type":"string"}}}],"readOnly":true}},"required":["add_values","remove_values","value"]}}},"paths":{"/api/records/{object_identifier}/{entity_id}":{"patch":{"operationId":"records_partial_update","description":"Update entity record (partial)","parameters":[{"in":"path","name":"entity_id","schema":{"type":"string","pattern":"^[0-9a-fA-F]{8}\\-[0-9a-fA-F]{4}\\-[0-9a-fA-F]{4}\\-[0-9a-fA-F]{4}\\-[0-9a-fA-F]{12}$"},"required":true},{"in":"path","name":"object_identifier","schema":{"type":"string"},"required":true},{"in":"query","name":"return_all_fields","schema":{"type":"boolean"},"description":"If true, return all fields even if not updated"}],"tags":["records"],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/PatchedEntityRecordUpdateRequest"}}}},"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/EntityRecordDetail"}}},"description":""},"400":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}},"description":""}}}}}}
```

### Archive a Record (DELETE)

Want to try the API out? Visit our [Swagger](https://app.go.kizen.com/api/docs/public/swagger#/records/records_destroy) docs.

## DELETE /api/records/{object\_identifier}/{entity\_id}

> Archive entity record

```json
{"openapi":"3.0.3","info":{"title":"Kizen API","version":"1.0.0"},"security":[{"businessId":[],"userId":[],"apiKey":[]}],"components":{"securitySchemes":{"businessId":{"type":"apiKey","in":"header","name":"X-BUSINESS-ID"}}},"paths":{"/api/records/{object_identifier}/{entity_id}":{"delete":{"operationId":"records_destroy","description":"Archive entity record","parameters":[{"in":"path","name":"entity_id","schema":{"type":"string","pattern":"^[0-9a-fA-F]{8}\\-[0-9a-fA-F]{4}\\-[0-9a-fA-F]{4}\\-[0-9a-fA-F]{4}\\-[0-9a-fA-F]{12}$"},"required":true},{"in":"path","name":"object_identifier","schema":{"type":"string"},"required":true}],"tags":["records"],"responses":{"204":{"description":"No response body"}}}}}}
```

### List Field Values for a Record Field (GET)

Want to try the API out? Visit our [Swagger](https://app.go.kizen.com/api/docs/public/swagger#/records/records_field_values_list) docs.

## List values for record field

> Useful when retrieving all values from a summarized relationship field

```json
{"openapi":"3.0.3","info":{"title":"Kizen API","version":"1.0.0"},"security":[{"businessId":[],"userId":[],"apiKey":[]}],"components":{"securitySchemes":{"businessId":{"type":"apiKey","in":"header","name":"X-BUSINESS-ID"}},"schemas":{"PaginatedFieldValuesList":{"type":"object","required":["count","results"],"properties":{"count":{"type":"integer"},"next":{"type":"string","nullable":true,"format":"uri"},"previous":{"type":"string","nullable":true,"format":"uri"},"results":{"type":"array","items":{"$ref":"#/components/schemas/FieldValues"}},"errors":{"oneOf":[{"type":"null"},{"type":"array","items":{"type":"string"}}]}}},"FieldValues":{"oneOf":[{"$ref":"#/components/schemas/ClientTypeaheadSearch"},{"$ref":"#/components/schemas/RelationshipFieldValue"}]},"ClientTypeaheadSearch":{"type":"object","properties":{"id":{"type":"string","format":"uuid"},"first_name":{"type":"string"},"last_name":{"type":"string"},"full_name":{"type":"string"},"email":{"type":"string"},"display_name":{"type":"string"}},"required":["display_name","email","first_name","full_name","id","last_name"]},"RelationshipFieldValue":{"type":"object","properties":{"id":{"type":"string","format":"uuid"},"name":{"type":"string"},"display_name":{"type":"string"}},"required":["display_name","id","name"]}}},"paths":{"/api/records/{entity_id}/field-values/{field_id}":{"get":{"operationId":"records_field_values_list","description":"Useful when retrieving all values from a summarized relationship field","summary":"List values for record field","parameters":[{"in":"path","name":"entity_id","schema":{"type":"string","format":"uuid"},"required":true},{"in":"path","name":"field_id","schema":{"type":"string","format":"uuid"},"required":true},{"name":"page","required":false,"in":"query","description":"A page number within the paginated result set.","schema":{"type":"integer"}},{"name":"page_size","required":false,"in":"query","description":"Number of results to return per page.","schema":{"type":"integer"}},{"in":"query","name":"search","schema":{"type":"string"}}],"tags":["records"],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/PaginatedFieldValuesList"}}},"description":""}}}}}}
```

***

## Manage Records by ID Schemas

### Retrieve a Record Schema

## The EntityRecordDetail object

```json
{"openapi":"3.0.3","info":{"title":"Kizen API","version":"1.0.0"},"components":{"schemas":{"EntityRecordDetail":{"type":"object","properties":{"object_type":{"type":"string"},"num_upcoming_activities":{"type":"integer"},"fields":{"$ref":"#/components/schemas/Fields"},"id":{"type":"string","format":"uuid"},"client_info":{"$ref":"#/components/schemas/ClientInfo"},"access":{"$ref":"#/components/schemas/AccessSerpy"},"num_associated_team_members":{"type":"integer"},"lead_source_types":{"type":"array","items":{"$ref":"#/components/schemas/LeadSourceType"}}},"required":["access","client_info","fields","id","lead_source_types","num_associated_team_members","num_upcoming_activities","object_type"]},"Fields":{"type":"object","properties":{"id":{"$ref":"#/components/schemas/SerializedFieldValueDict"}},"required":["id"]},"SerializedFieldValueDict":{"type":"object","properties":{"id":{"type":"string"},"field_type":{"type":"string"},"display_name":{"type":"string"},"value":{"type":"object","additionalProperties":{}}},"required":["display_name","field_type","id","value"]},"ClientInfo":{"type":"object","properties":{"num_addresses_v2":{"type":"integer"},"display_name":{"type":"string"},"email_on_suppression_list":{"type":"boolean"}},"required":["display_name","email_on_suppression_list","num_addresses_v2"]},"AccessSerpy":{"type":"object","properties":{"view":{"type":"boolean"},"edit":{"type":"boolean"},"remove":{"type":"boolean"}},"required":["edit","remove","view"]},"LeadSourceType":{"type":"object","properties":{"value":{"$ref":"#/components/schemas/ValueEnum"},"label":{"type":"string"}},"required":["label","value"]},"ValueEnum":{"enum":["organic_search","direct_traffic","site_referral","facebook_ads","google_ads","social","paid_social","utm","custom"],"type":"string","description":"* `organic_search` - Organic Search\n* `direct_traffic` - Direct Traffic\n* `site_referral` - Site Referral\n* `facebook_ads` - Facebook Ads\n* `google_ads` - Google Ads\n* `social` - Social\n* `paid_social` - Paid Social\n* `utm` - UTM\n* `custom` - Custom"}}}}
```

### Update a Record Schema

## The EntityRecordDetail object

```json
{"openapi":"3.0.3","info":{"title":"Kizen API","version":"1.0.0"},"components":{"schemas":{"EntityRecordDetail":{"type":"object","properties":{"object_type":{"type":"string"},"num_upcoming_activities":{"type":"integer"},"fields":{"$ref":"#/components/schemas/Fields"},"id":{"type":"string","format":"uuid"},"client_info":{"$ref":"#/components/schemas/ClientInfo"},"access":{"$ref":"#/components/schemas/AccessSerpy"},"num_associated_team_members":{"type":"integer"},"lead_source_types":{"type":"array","items":{"$ref":"#/components/schemas/LeadSourceType"}}},"required":["access","client_info","fields","id","lead_source_types","num_associated_team_members","num_upcoming_activities","object_type"]},"Fields":{"type":"object","properties":{"id":{"$ref":"#/components/schemas/SerializedFieldValueDict"}},"required":["id"]},"SerializedFieldValueDict":{"type":"object","properties":{"id":{"type":"string"},"field_type":{"type":"string"},"display_name":{"type":"string"},"value":{"type":"object","additionalProperties":{}}},"required":["display_name","field_type","id","value"]},"ClientInfo":{"type":"object","properties":{"num_addresses_v2":{"type":"integer"},"display_name":{"type":"string"},"email_on_suppression_list":{"type":"boolean"}},"required":["display_name","email_on_suppression_list","num_addresses_v2"]},"AccessSerpy":{"type":"object","properties":{"view":{"type":"boolean"},"edit":{"type":"boolean"},"remove":{"type":"boolean"}},"required":["edit","remove","view"]},"LeadSourceType":{"type":"object","properties":{"value":{"$ref":"#/components/schemas/ValueEnum"},"label":{"type":"string"}},"required":["label","value"]},"ValueEnum":{"enum":["organic_search","direct_traffic","site_referral","facebook_ads","google_ads","social","paid_social","utm","custom"],"type":"string","description":"* `organic_search` - Organic Search\n* `direct_traffic` - Direct Traffic\n* `site_referral` - Site Referral\n* `facebook_ads` - Facebook Ads\n* `google_ads` - Google Ads\n* `social` - Social\n* `paid_social` - Paid Social\n* `utm` - UTM\n* `custom` - Custom"}}}}
```

## The EntityRecordUpdateRequest object

```json
{"openapi":"3.0.3","info":{"title":"Kizen API","version":"1.0.0"},"components":{"schemas":{"EntityRecordUpdateRequest":{"type":"object","properties":{"fields":{"type":"array","items":{"$ref":"#/components/schemas/FieldRequest"}},"archived_conflict":{"nullable":true,"description":"Updates the identifier of matching archived record to not raise a conflict.\n\n* `overwrite` - overwrite","oneOf":[{"$ref":"#/components/schemas/ArchivedConflictEnum"},{"$ref":"#/components/schemas/NullEnum"}]}},"required":["fields"]},"FieldRequest":{"type":"object","properties":{"id":{"type":"string","format":"uuid","nullable":true,"description":"ID of the field, can be used instead of field name."},"name":{"type":"string","nullable":true,"minLength":1,"description":"Name of the field, can be used instead of field ID."},"value":{"nullable":true,"description":"Value to be set, this is required for fields that do not allow multiple values."},"add_values":{"type":"array","items":{},"nullable":true,"description":"Values to be added, applicable only for fields that allow multiple values."},"remove_values":{"type":"array","items":{},"nullable":true,"description":"Values to be removed, applicable only for fields that allow multiple values."}}},"ArchivedConflictEnum":{"enum":["overwrite"],"type":"string","description":"* `overwrite` - overwrite"},"NullEnum":{"enum":[null]}}}}
```

### Partial Update a Record Schema

## The PatchedEntityRecordUpdateRequest object

```json
{"openapi":"3.0.3","info":{"title":"Kizen API","version":"1.0.0"},"components":{"schemas":{"PatchedEntityRecordUpdateRequest":{"type":"object","properties":{"fields":{"type":"array","items":{"$ref":"#/components/schemas/FieldRequest"}},"archived_conflict":{"nullable":true,"description":"Updates the identifier of matching archived record to not raise a conflict.\n\n* `overwrite` - overwrite","oneOf":[{"$ref":"#/components/schemas/ArchivedConflictEnum"},{"$ref":"#/components/schemas/NullEnum"}]}}},"FieldRequest":{"type":"object","properties":{"id":{"type":"string","format":"uuid","nullable":true,"description":"ID of the field, can be used instead of field name."},"name":{"type":"string","nullable":true,"minLength":1,"description":"Name of the field, can be used instead of field ID."},"value":{"nullable":true,"description":"Value to be set, this is required for fields that do not allow multiple values."},"add_values":{"type":"array","items":{},"nullable":true,"description":"Values to be added, applicable only for fields that allow multiple values."},"remove_values":{"type":"array","items":{},"nullable":true,"description":"Values to be removed, applicable only for fields that allow multiple values."}}},"ArchivedConflictEnum":{"enum":["overwrite"],"type":"string","description":"* `overwrite` - overwrite"},"NullEnum":{"enum":[null]}}}}
```

## The EntityRecordDetail object

```json
{"openapi":"3.0.3","info":{"title":"Kizen API","version":"1.0.0"},"components":{"schemas":{"EntityRecordDetail":{"type":"object","properties":{"object_type":{"type":"string"},"num_upcoming_activities":{"type":"integer"},"fields":{"$ref":"#/components/schemas/Fields"},"id":{"type":"string","format":"uuid"},"client_info":{"$ref":"#/components/schemas/ClientInfo"},"access":{"$ref":"#/components/schemas/AccessSerpy"},"num_associated_team_members":{"type":"integer"},"lead_source_types":{"type":"array","items":{"$ref":"#/components/schemas/LeadSourceType"}}},"required":["access","client_info","fields","id","lead_source_types","num_associated_team_members","num_upcoming_activities","object_type"]},"Fields":{"type":"object","properties":{"id":{"$ref":"#/components/schemas/SerializedFieldValueDict"}},"required":["id"]},"SerializedFieldValueDict":{"type":"object","properties":{"id":{"type":"string"},"field_type":{"type":"string"},"display_name":{"type":"string"},"value":{"type":"object","additionalProperties":{}}},"required":["display_name","field_type","id","value"]},"ClientInfo":{"type":"object","properties":{"num_addresses_v2":{"type":"integer"},"display_name":{"type":"string"},"email_on_suppression_list":{"type":"boolean"}},"required":["display_name","email_on_suppression_list","num_addresses_v2"]},"AccessSerpy":{"type":"object","properties":{"view":{"type":"boolean"},"edit":{"type":"boolean"},"remove":{"type":"boolean"}},"required":["edit","remove","view"]},"LeadSourceType":{"type":"object","properties":{"value":{"$ref":"#/components/schemas/ValueEnum"},"label":{"type":"string"}},"required":["label","value"]},"ValueEnum":{"enum":["organic_search","direct_traffic","site_referral","facebook_ads","google_ads","social","paid_social","utm","custom"],"type":"string","description":"* `organic_search` - Organic Search\n* `direct_traffic` - Direct Traffic\n* `site_referral` - Site Referral\n* `facebook_ads` - Facebook Ads\n* `google_ads` - Google Ads\n* `social` - Social\n* `paid_social` - Paid Social\n* `utm` - UTM\n* `custom` - Custom"}}}}
```

### List Field Values for a Record Field Schema

## The PaginatedFieldValuesList object

```json
{"openapi":"3.0.3","info":{"title":"Kizen API","version":"1.0.0"},"components":{"schemas":{"PaginatedFieldValuesList":{"type":"object","required":["count","results"],"properties":{"count":{"type":"integer"},"next":{"type":"string","nullable":true,"format":"uri"},"previous":{"type":"string","nullable":true,"format":"uri"},"results":{"type":"array","items":{"$ref":"#/components/schemas/FieldValues"}},"errors":{"oneOf":[{"type":"null"},{"type":"array","items":{"type":"string"}}]}}},"FieldValues":{"oneOf":[{"$ref":"#/components/schemas/ClientTypeaheadSearch"},{"$ref":"#/components/schemas/RelationshipFieldValue"}]},"ClientTypeaheadSearch":{"type":"object","properties":{"id":{"type":"string","format":"uuid"},"first_name":{"type":"string"},"last_name":{"type":"string"},"full_name":{"type":"string"},"email":{"type":"string"},"display_name":{"type":"string"}},"required":["display_name","email","first_name","full_name","id","last_name"]},"RelationshipFieldValue":{"type":"object","properties":{"id":{"type":"string","format":"uuid"},"name":{"type":"string"},"display_name":{"type":"string"}},"required":["display_name","id","name"]}}}}
```

***

## What’s Next

After managing your <code class="expression">space.vars.entities</code> by ID, you can:

* Retrieve a <code class="expression">space.vars.entity</code> by name or email to resolve identifiers when a <code class="expression">space.vars.entity</code> ID is not yet known
* Search <code class="expression">space.vars.entities</code> to select candidate <code class="expression">space.vars.entities</code> before performing ID-based operations
* Use the Upsert API to implement conditional create-or-update workflows
* Combine ID-based management with lookup or search patterns for synchronization scenarios
* Incorporate <code class="expression">space.vars.entity</code> management endpoints into schema-aware integrations

For more information on <code class="expression">space.vars.entity</code> operations, see the related <code class="expression">space.vars.entities</code> API topics below:

<details>

<summary>Related Topics</summary>

* [Add Records API](/docs/concepts/objects/records/records-apis/add-records-api)
* [Lookup Record API](/docs/concepts/objects/records/records-apis/lookup-record-api)
* [Search Records API](/docs/concepts/objects/records/records-apis/search-records-api)
* [Create or Update Records (Upsert) API](/docs/concepts/objects/records/records-apis/create-or-update-records-upsert-api)

</details>


# Lookup Record API

Use the Lookup Record API to retrieve records by name or email, resolve external identifiers, prevent duplicates, and transition to ID-based update and upsert operations.

{% hint style="success" %}
**Audience:** Developers and Solution Architects

**Purpose:**  Explains how to use the Lookup <code class="expression">space.vars.entity</code> API to retrieve <code class="expression">space.vars.entities</code> by name or email and resolve external identifiers into stable <code class="expression">space.vars.entity</code> IDs for integration workflows.
{% endhint %}

## Overview

Use the **Lookup Record** endpoint to retrieve an existing <code class="expression">space.vars.entity</code> using a human-readable identifier instead of a system-generated record ID.&#x20;

This supports integration workflows that must resolve <code class="expression">space.vars.entities</code> dynamically before performing ID-based operations. Different <code class="expression">space.vars.entity</code> types use different lookup identifiers, and those identifiers must be unique within the Object.

The material on this page builds on information covered in [Records Core Concepts](/docs/concepts/objects/records/records-core-concepts) and the [Records Data Model](/docs/concepts/objects/records/records-data-model).

### Why Use This API

You can use the Lookup <code class="expression">space.vars.entity</code> API when you need to:

* Resolve a <code class="expression">space.vars.entity</code> by name or email before performing additional operations
* Synchronize data from external systems that store business identifiers
* Validate whether a <code class="expression">space.vars.entity</code> exists before creating a new one
* Support upsert-style workflows
* Resolve identifiers during data migration

Lookup <code class="expression">space.vars.entity</code> operations are typically used before calling ID-based endpoints such as update, patch, archive, or delete. Once a <code class="expression">space.vars.entity</code> ID is known, ID-based operations are preferred. Unlike the Search API, which supports flexible filtering and may return multiple results, the Lookup <code class="expression">space.vars.entity</code> API is designed to retrieve a single <code class="expression">space.vars.entity</code> based on a unique identifier.

### Lookup Record API Behavior

Use this endpoint to resolve a <code class="expression">space.vars.entity</code> by its lookup identifier and return the corresponding <code class="expression">space.vars.entity</code> data when a match exists. It:

* Returns the matching <code class="expression">space.vars.entity</code> when a valid <code class="expression">space.vars.entity</code> name or email identifier exists within the specified <code class="expression">space.vars.object</code>
* Returns a not-found result when no matching <code class="expression">space.vars.entity</code> exists
* Does not create new <code class="expression">space.vars.entities</code>
* Enforces <code class="expression">space.vars.object</code>-level uniqueness constraints
* Uses record name for most <code class="expression">space.vars.objects</code> and email for <code class="expression">space.vars.contact</code> <code class="expression">space.vars.entities</code>
* Performs case-insensitive matching on lookup identifiers

  Strips leading, trailing, and duplicate whitespace before evaluating the lookup value
* Respects permission constraints configured for the requesting user context
* Returns a response structured according to the Records Data Model schema

***

## Lookup Record Endpoint

Want to try the API out? Visit our [Swagger](https://app.go.kizen.com/api/docs/public/swagger#/records/records_lookup_retrieve) docs.

## GET /api/records/{object\_identifier}/lookup

> Get entity record by name or email

```json
{"openapi":"3.0.3","info":{"title":"Kizen API","version":"1.0.0"},"security":[{"businessId":[],"userId":[],"apiKey":[]}],"components":{"securitySchemes":{"businessId":{"type":"apiKey","in":"header","name":"X-BUSINESS-ID"}},"schemas":{"EntityRecordDetail":{"type":"object","properties":{"object_type":{"type":"string"},"num_upcoming_activities":{"type":"integer"},"fields":{"$ref":"#/components/schemas/Fields"},"id":{"type":"string","format":"uuid"},"client_info":{"$ref":"#/components/schemas/ClientInfo"},"access":{"$ref":"#/components/schemas/AccessSerpy"},"num_associated_team_members":{"type":"integer"},"lead_source_types":{"type":"array","items":{"$ref":"#/components/schemas/LeadSourceType"}}},"required":["access","client_info","fields","id","lead_source_types","num_associated_team_members","num_upcoming_activities","object_type"]},"Fields":{"type":"object","properties":{"id":{"$ref":"#/components/schemas/SerializedFieldValueDict"}},"required":["id"]},"SerializedFieldValueDict":{"type":"object","properties":{"id":{"type":"string"},"field_type":{"type":"string"},"display_name":{"type":"string"},"value":{"type":"object","additionalProperties":{}}},"required":["display_name","field_type","id","value"]},"ClientInfo":{"type":"object","properties":{"num_addresses_v2":{"type":"integer"},"display_name":{"type":"string"},"email_on_suppression_list":{"type":"boolean"}},"required":["display_name","email_on_suppression_list","num_addresses_v2"]},"AccessSerpy":{"type":"object","properties":{"view":{"type":"boolean"},"edit":{"type":"boolean"},"remove":{"type":"boolean"}},"required":["edit","remove","view"]},"LeadSourceType":{"type":"object","properties":{"value":{"$ref":"#/components/schemas/ValueEnum"},"label":{"type":"string"}},"required":["label","value"]},"ValueEnum":{"enum":["organic_search","direct_traffic","site_referral","facebook_ads","google_ads","social","paid_social","utm","custom"],"type":"string","description":"* `organic_search` - Organic Search\n* `direct_traffic` - Direct Traffic\n* `site_referral` - Site Referral\n* `facebook_ads` - Facebook Ads\n* `google_ads` - Google Ads\n* `social` - Social\n* `paid_social` - Paid Social\n* `utm` - UTM\n* `custom` - Custom"}}},"paths":{"/api/records/{object_identifier}/lookup":{"get":{"operationId":"records_lookup_retrieve","description":"Get entity record by name or email","parameters":[{"in":"query","name":"all_fields","schema":{"type":"boolean"},"description":"Return all fields."},{"in":"query","name":"field_ids","schema":{"type":"string"},"description":"Comma separated field ids to include in response. If present but empty, it will return default fields only."},{"in":"query","name":"field_names","schema":{"type":"string"},"description":"Comma separated field names to include in response. If present but empty, it will return default fields only."},{"in":"query","name":"identifier","schema":{"type":"string"},"description":"Entity record name or contact email","required":true},{"in":"path","name":"object_identifier","schema":{"type":"string"},"required":true}],"tags":["records"],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/EntityRecordDetail"}}},"description":""}}}}}}
```

### Lookup Record Schema

## The EntityRecordDetail object

```json
{"openapi":"3.0.3","info":{"title":"Kizen API","version":"1.0.0"},"components":{"schemas":{"EntityRecordDetail":{"type":"object","properties":{"object_type":{"type":"string"},"num_upcoming_activities":{"type":"integer"},"fields":{"$ref":"#/components/schemas/Fields"},"id":{"type":"string","format":"uuid"},"client_info":{"$ref":"#/components/schemas/ClientInfo"},"access":{"$ref":"#/components/schemas/AccessSerpy"},"num_associated_team_members":{"type":"integer"},"lead_source_types":{"type":"array","items":{"$ref":"#/components/schemas/LeadSourceType"}}},"required":["access","client_info","fields","id","lead_source_types","num_associated_team_members","num_upcoming_activities","object_type"]},"Fields":{"type":"object","properties":{"id":{"$ref":"#/components/schemas/SerializedFieldValueDict"}},"required":["id"]},"SerializedFieldValueDict":{"type":"object","properties":{"id":{"type":"string"},"field_type":{"type":"string"},"display_name":{"type":"string"},"value":{"type":"object","additionalProperties":{}}},"required":["display_name","field_type","id","value"]},"ClientInfo":{"type":"object","properties":{"num_addresses_v2":{"type":"integer"},"display_name":{"type":"string"},"email_on_suppression_list":{"type":"boolean"}},"required":["display_name","email_on_suppression_list","num_addresses_v2"]},"AccessSerpy":{"type":"object","properties":{"view":{"type":"boolean"},"edit":{"type":"boolean"},"remove":{"type":"boolean"}},"required":["edit","remove","view"]},"LeadSourceType":{"type":"object","properties":{"value":{"$ref":"#/components/schemas/ValueEnum"},"label":{"type":"string"}},"required":["label","value"]},"ValueEnum":{"enum":["organic_search","direct_traffic","site_referral","facebook_ads","google_ads","social","paid_social","utm","custom"],"type":"string","description":"* `organic_search` - Organic Search\n* `direct_traffic` - Direct Traffic\n* `site_referral` - Site Referral\n* `facebook_ads` - Facebook Ads\n* `google_ads` - Google Ads\n* `social` - Social\n* `paid_social` - Paid Social\n* `utm` - UTM\n* `custom` - Custom"}}}}
```

***

## What’s Next

After retrieving a <code class="expression">space.vars.entity</code> by lookup, you can:

* Use ID-based endpoints to update, patch, archive, or modify the <code class="expression">space.vars.entity</code>
* Use the Upsert API to conditionally create or update <code class="expression">space.vars.entities</code>
* Create a new <code class="expression">space.vars.entity</code> when no existing match is found
* Reference the returned <code class="expression">space.vars.entity</code> ID for subsequent operations
* Incorporate lookup workflows into schema-aware integrations

For more information on <code class="expression">space.vars.entity</code> operations, see the related <code class="expression">space.vars.entities</code> API topics below:

<details>

<summary>Related Topics</summary>

* [Add Records API](/docs/concepts/objects/records/records-apis/add-records-api)
* [Manage Records by ID API](/docs/concepts/objects/records/records-apis/manage-records-by-id-api)
* [Search Records API](/docs/concepts/objects/records/records-apis/search-records-api)
* [Create or Update Records (Upsert) API](/docs/concepts/objects/records/records-apis/create-or-update-records-upsert-api)

</details>


# Search Records API

Search Records API for retrieving Records using structured query filters, AND/OR logic, field conditions, pagination, and full-text search for advanced integrations and dynamic data retrieval.

{% hint style="success" %}
**Audience:** Developers, Integration Engineers, Solution Architects

**Purpose:** Explains how to retrieve <code class="expression">space.vars.entities</code> programmatically using structured query criteria when a single unique identifier is not available.
{% endhint %}

## Overview

The **Search Records** endpoint allows you to retrieve one or more <code class="expression">space.vars.entities</code> based on structured query criteria rather than a single unique identifier.

This endpoint is designed for flexible, condition-based retrieval scenarios. It enables external systems to filter <code class="expression">space.vars.entities</code> by field values, apply complex query logic, return selected fields, and retrieve collections of <code class="expression">space.vars.entities</code> that match dynamic criteria, without relying on ID- or lookup-based access.

The material on this page builds on information covered in [Records Core Concepts](/docs/concepts/objects/records/records-core-concepts) and [Object Data Model](/docs/concepts/objects/object-data-model).

### Why Use This API

Use the Record Search endpoint when you need to retrieve <code class="expression">space.vars.entities</code> based on conditions rather than a known unique identifier.

Common scenarios include:

* Retrieving <code class="expression">space.vars.entities</code> that meet lifecycle or status criteria
* Filtering <code class="expression">space.vars.entities</code> by one or more field values
* Identifying candidate <code class="expression">space.vars.entities</code> for synchronization with external systems
* Building reporting or analytics integrations
* Implementing conditional workflows
* Pre-validating data before updates or <code class="expression">space.vars.automation</code> triggers

Search is ideal when:

* Multiple <code class="expression">space.vars.entities</code> may match the criteria
* Filtering must be dynamic or user-defined
* Lookup by name or email is not possible
* The exact <code class="expression">space.vars.entity</code> ID is unknown

Once specific <code class="expression">space.vars.entities</code> are identified, use ID-based retrieval for deterministic updates, archival, or other <code class="expression">space.vars.entity</code>-level operations.

### Search Records API Behavior

Understand how this endpoint behaves:

* Accepts structured query criteria referencing valid field API names
* Returns a collection of matching <code class="expression">space.vars.entities</code> (zero, one, or many)
* Does not guarantee uniqueness and is not a substitute for lookup when a single result is required
* Supports selective field returns to control response size
* Respects <code class="expression">space.vars.object</code>-level, <code class="expression">space.vars.entity</code>-level, and field-level permissions
* May paginate large result sets
* Does not modify <code class="expression">space.vars.entities</code>
* Supports multi-layered filtering with grouped conditions and AND/OR logic, enabling precise, structured <code class="expression">space.vars.entity</code> retrieval beyond simple text search.

### Advanced Query Filter Capabilities

In addition to basic text search, the <code class="expression">space.vars.entities</code> Search endpoint supports structured, multi-layer filtering that mirrors the filtering logic available in the <code class="expression">space.vars.Kizen\_company\_name</code> UI.

This enables precise dataset selection for <code class="expression">space.vars.automation</code>, <code class="expression">space.vars.workflow</code> logic, reporting, synchronization, and segmentation use cases.

The request body supports **two levels of logical grouping**:

* Filter logic within a query group
* Logical relationships between query groups

Understanding this structure is critical when constructing <code class="expression">space.vars.automation</code>-driven or integration-based searches.

#### Query Group Structure

The `query` property is an array of **query groups**. There may be one or many groups.

Each query group contains:

* `filters` : a list of individual field conditions
* `and` : controls how filters inside that group are evaluated
* `id` : an internal identifier for the group

Example structure:

```json
{
  "and": false,
  "query": [
    {
      "id": "query-0",
      "and": false,
      "filters": [
        {
          "type": "fields",
          "subtype": "non_custom",
          "field": "birthday",
          "condition": "=",
          "value": "2026-03-18"
        }
      ]
    }
  ]
}
```

#### Layer 1: Filter Logic Within a Query Group

Inside each query group:

* `and: true` → All filters in that group must match (**ALL** logic)
* `and: false` → Any filter in that group may match (**ANY** logic)

This corresponds to the **ALL / ANY** toggle visible in the UI filter builder. Filters within a group operate only relative to that group.

#### Layer 2: Logic Between Query Groups

The top-level `and` property controls how query groups relate to each other:

* `and: true` → All groups must match
* `and: false` → Any group may match (functions as OR operator)

Conceptually, evaluation follows this pattern:

* *(Group 1 Filters) \[AND/OR] (Group 2 Filters) \[AND/OR] (Group 3 Filters) ...*

Each group may contain multiple filters, and there is no inherent two-group limitation.

#### Filter Definition

Each filter <code class="expression">space.vars.object</code> includes:

* `type` : category of filter (e.g., `fields`, `forms`, `logged_activities`, `related_object`, etc.)
* `subtype` : subtype classification (e.g., `non_custom`, custom field types)
* `field` : field API identifier
* `condition` : comparison operator
* `value` : comparison value

Available operators depend on field type (date, text, number, boolean, etc.) and mirror those available in the UI filter builder. Invalid operator–field combinations will result in validation errors.

#### Cross-Entity Filtering

Filtering is not limited to standard <code class="expression">space.vars.entity</code> fields. Depending on `type` and `subtype`, queries may target:

* Standard fields
* <code class="expression">space.vars.fields</code>
* Forms and submissions
* Logged <code class="expression">space.vars.activities</code>
* Scheduled <code class="expression">space.vars.activities</code>
* Related <code class="expression">space.vars.object</code>
* Other supported <code class="expression">space.vars.entity</code> domains

This allows advanced segmentation across multiple <code class="expression">space.vars.entity</code> dimensions within a single query.

#### Interaction with Text Search

The endpoint supports both:

* Full-text search via the `search` parameter
* Structured filtering via `query`

If both are provided, results must satisfy the combined constraints. Structured filtering should be used when deterministic logical control is required.

#### Search Query Optimization

Because the API supports layered AND/OR logic:

* Small changes in `and` values can significantly alter result sets.
* Broad OR logic may return large datasets.
* Complex or loosely scoped filters may increase response size and processing time.

Best practices:

* Scope filters as narrowly as possible.
* Limit returned fields using `field_ids` or `field_names`.
* Use pagination when expecting large result sets.
* Validate filter logic carefully before deploying to production.

#### Integration Guidance

When building advanced queries:

1. Construct the filter in the UI.
2. Inspect the resulting request payload in the browser network tab.
3. Replicate the `query` structure in your API call (except the `view_model` property; more on that below).
4. Capture returned <code class="expression">space.vars.entity</code> IDs for deterministic follow-up operations.

For operations requiring guaranteed uniqueness, use ID-based retrieval instead of complex logical filtering.

#### **Omit `view_model` property**

When constructing advanced queries using the UI filter builder and inspecting the network request, you may see a `view_model` property included in the request body.

The `view_model` property is used internally by the UI and **should not** be used for API-based search requests.

When replicating the query structure in your API call:

* Copy the `query` array and logical `and` values.
* Omit the `view_model` property.
* Submit only supported API request properties.

Including `view_model` in an API request will result in missing fields or schema mismatch issues.

***

## Search Records Endpoint

Want to try the API out? Visit our [Swagger](https://app.go.kizen.com/api/docs/public/swagger#/records/records_search_create) docs.

## POST /api/records/{object\_identifier}/search

> Search entity records.

```json
{"openapi":"3.0.3","info":{"title":"Kizen API","version":"1.0.0"},"security":[{"businessId":[],"userId":[],"apiKey":[]}],"components":{"securitySchemes":{"businessId":{"type":"apiKey","in":"header","name":"X-BUSINESS-ID"}},"schemas":{"EntityRecordSearchPayloadRequest":{"type":"object","properties":{"field_names":{"type":"array","items":{"type":"string","minLength":1},"nullable":true,"description":"List of field names to return. Only one of 'field_names' or 'field_ids' is allowed."},"field_ids":{"type":"array","items":{"type":"string","format":"uuid"},"nullable":true,"description":"List of field ids to return. Only one of 'field_ids' or 'field_names' is allowed."},"search_within_field_names":{"type":"array","items":{"type":"string","minLength":1},"nullable":true,"description":"List of field names to search within. Only one of 'search_within_field_names' or 'search_within_field_ids' is allowed."},"search_within_field_ids":{"type":"array","items":{"type":"string","format":"uuid"},"nullable":true,"description":"List of field ids to search within. Only one of 'search_within_field_ids' or 'search_within_field_names' is allowed."},"query":{"type":"array","items":{"$ref":"#/components/schemas/FilterQueryRequest"}},"and":{"type":"boolean","nullable":true,"default":true,"description":"Whether to apply AND or OR logic in filters"}}},"FilterQueryRequest":{"type":"object","properties":{"filters":{"type":"array","items":{"type":"object","additionalProperties":{}},"description":"List of filters to apply."},"and":{"type":"boolean","nullable":true,"default":true,"description":"Whether to apply AND or OR logic in filters"}}},"PaginatedEntityRecordListList":{"type":"object","required":["count","results"],"properties":{"count":{"type":"integer"},"next":{"type":"string","nullable":true,"format":"uri"},"previous":{"type":"string","nullable":true,"format":"uri"},"results":{"type":"array","items":{"$ref":"#/components/schemas/EntityRecordList"}},"errors":{"oneOf":[{"type":"null"},{"type":"array","items":{"type":"string"}}]}}},"EntityRecordList":{"type":"object","properties":{"object_type":{"type":"string"},"fields":{"$ref":"#/components/schemas/Fields"},"id":{"type":"string","format":"uuid"},"client_info":{"$ref":"#/components/schemas/ClientInfo"},"access":{"$ref":"#/components/schemas/AccessSerpy"}},"required":["access","client_info","fields","id","object_type"]},"Fields":{"type":"object","properties":{"id":{"$ref":"#/components/schemas/SerializedFieldValueDict"}},"required":["id"]},"SerializedFieldValueDict":{"type":"object","properties":{"id":{"type":"string"},"field_type":{"type":"string"},"display_name":{"type":"string"},"value":{"type":"object","additionalProperties":{}}},"required":["display_name","field_type","id","value"]},"ClientInfo":{"type":"object","properties":{"num_addresses_v2":{"type":"integer"},"display_name":{"type":"string"},"email_on_suppression_list":{"type":"boolean"}},"required":["display_name","email_on_suppression_list","num_addresses_v2"]},"AccessSerpy":{"type":"object","properties":{"view":{"type":"boolean"},"edit":{"type":"boolean"},"remove":{"type":"boolean"}},"required":["edit","remove","view"]}}},"paths":{"/api/records/{object_identifier}/search":{"post":{"operationId":"records_search_create","description":"Search entity records.","parameters":[{"in":"query","name":"group_id","schema":{"type":"string"},"description":"Group id to filter records by."},{"in":"query","name":"in_group_ids","schema":{"type":"string"},"description":"Comma separated list of group ids. Only records in these groups will be returned. If both 'in_group_ids' and 'not_in_group_ids' are supplied, only 'in_group_ids' will be considered."},{"in":"query","name":"not_in_group_ids","schema":{"type":"string"},"description":"Comma separated list of group ids. Only records not in these groups will be returned. If both 'in_group_ids' and 'not_in_group_ids' are supplied, only 'in_group_ids' will be considered."},{"in":"path","name":"object_identifier","schema":{"type":"string"},"required":true},{"in":"query","name":"ordering","schema":{"type":"string"},"description":"Which field to use when ordering the results."},{"in":"query","name":"page","schema":{"type":"integer"},"description":"A page number within the paginated result set."},{"in":"query","name":"page_size","schema":{"type":"integer"},"description":"Number of results to return per page."},{"in":"query","name":"search","schema":{"type":"string"},"description":"\n                A search term, by default, searches Contact's email, first_name, last_name, home_phone, mobile_phone, business_phone and Record's name. 'search_within_field_names' or 'search_within_field_ids' can be used to specify fields to search within.\n                "}],"tags":["records"],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/EntityRecordSearchPayloadRequest"}}}},"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/PaginatedEntityRecordListList"}}},"description":""}}}}}}
```

***

## Search Records Schema

## The EntityRecordSearchPayloadRequest object

```json
{"openapi":"3.0.3","info":{"title":"Kizen API","version":"1.0.0"},"components":{"schemas":{"EntityRecordSearchPayloadRequest":{"type":"object","properties":{"field_names":{"type":"array","items":{"type":"string","minLength":1},"nullable":true,"description":"List of field names to return. Only one of 'field_names' or 'field_ids' is allowed."},"field_ids":{"type":"array","items":{"type":"string","format":"uuid"},"nullable":true,"description":"List of field ids to return. Only one of 'field_ids' or 'field_names' is allowed."},"search_within_field_names":{"type":"array","items":{"type":"string","minLength":1},"nullable":true,"description":"List of field names to search within. Only one of 'search_within_field_names' or 'search_within_field_ids' is allowed."},"search_within_field_ids":{"type":"array","items":{"type":"string","format":"uuid"},"nullable":true,"description":"List of field ids to search within. Only one of 'search_within_field_ids' or 'search_within_field_names' is allowed."},"query":{"type":"array","items":{"$ref":"#/components/schemas/FilterQueryRequest"}},"and":{"type":"boolean","nullable":true,"default":true,"description":"Whether to apply AND or OR logic in filters"}}},"FilterQueryRequest":{"type":"object","properties":{"filters":{"type":"array","items":{"type":"object","additionalProperties":{}},"description":"List of filters to apply."},"and":{"type":"boolean","nullable":true,"default":true,"description":"Whether to apply AND or OR logic in filters"}}}}}}
```

## The PaginatedEntityRecordListList object

```json
{"openapi":"3.0.3","info":{"title":"Kizen API","version":"1.0.0"},"components":{"schemas":{"PaginatedEntityRecordListList":{"type":"object","required":["count","results"],"properties":{"count":{"type":"integer"},"next":{"type":"string","nullable":true,"format":"uri"},"previous":{"type":"string","nullable":true,"format":"uri"},"results":{"type":"array","items":{"$ref":"#/components/schemas/EntityRecordList"}},"errors":{"oneOf":[{"type":"null"},{"type":"array","items":{"type":"string"}}]}}},"EntityRecordList":{"type":"object","properties":{"object_type":{"type":"string"},"fields":{"$ref":"#/components/schemas/Fields"},"id":{"type":"string","format":"uuid"},"client_info":{"$ref":"#/components/schemas/ClientInfo"},"access":{"$ref":"#/components/schemas/AccessSerpy"}},"required":["access","client_info","fields","id","object_type"]},"Fields":{"type":"object","properties":{"id":{"$ref":"#/components/schemas/SerializedFieldValueDict"}},"required":["id"]},"SerializedFieldValueDict":{"type":"object","properties":{"id":{"type":"string"},"field_type":{"type":"string"},"display_name":{"type":"string"},"value":{"type":"object","additionalProperties":{}}},"required":["display_name","field_type","id","value"]},"ClientInfo":{"type":"object","properties":{"num_addresses_v2":{"type":"integer"},"display_name":{"type":"string"},"email_on_suppression_list":{"type":"boolean"}},"required":["display_name","email_on_suppression_list","num_addresses_v2"]},"AccessSerpy":{"type":"object","properties":{"view":{"type":"boolean"},"edit":{"type":"boolean"},"remove":{"type":"boolean"}},"required":["edit","remove","view"]}}}}
```

## The EntityRecordList object

```json
{"openapi":"3.0.3","info":{"title":"Kizen API","version":"1.0.0"},"components":{"schemas":{"EntityRecordList":{"type":"object","properties":{"object_type":{"type":"string"},"fields":{"$ref":"#/components/schemas/Fields"},"id":{"type":"string","format":"uuid"},"client_info":{"$ref":"#/components/schemas/ClientInfo"},"access":{"$ref":"#/components/schemas/AccessSerpy"}},"required":["access","client_info","fields","id","object_type"]},"Fields":{"type":"object","properties":{"id":{"$ref":"#/components/schemas/SerializedFieldValueDict"}},"required":["id"]},"SerializedFieldValueDict":{"type":"object","properties":{"id":{"type":"string"},"field_type":{"type":"string"},"display_name":{"type":"string"},"value":{"type":"object","additionalProperties":{}}},"required":["display_name","field_type","id","value"]},"ClientInfo":{"type":"object","properties":{"num_addresses_v2":{"type":"integer"},"display_name":{"type":"string"},"email_on_suppression_list":{"type":"boolean"}},"required":["display_name","email_on_suppression_list","num_addresses_v2"]},"AccessSerpy":{"type":"object","properties":{"view":{"type":"boolean"},"edit":{"type":"boolean"},"remove":{"type":"boolean"}},"required":["edit","remove","view"]}}}}
```

***

## What’s Next

After Retrieving <code class="expression">space.vars.entities</code> via Search, you can:

* Retrieve specific <code class="expression">space.vars.entities</code> by ID for deterministic updates or archival
* Perform bulk operations on identified <code class="expression">space.vars.entity</code> sets
* Use returned field data to drive <code class="expression">space.vars.automation</code> logic
* Capture <code class="expression">space.vars.entity</code> IDs for synchronization with external systems

For more information on managing and modifying <code class="expression">space.vars.entities</code>, review the following <code class="expression">space.vars.entity</code> API topics below:

<details>

<summary>Related Topics</summary>

* [Add Records API](/docs/concepts/objects/records/records-apis)
* [Manage Records by ID API](/docs/concepts/objects/records/records-apis/manage-records-by-id-api)
* [Lookup Record API](/docs/concepts/objects/records/records-apis/lookup-record-api)
* [Create or Update Records (Upsert) API](/docs/concepts/objects/records/records-apis/create-or-update-records-upsert-api)

</details>


# Create or Update Records (Upsert) API

Create or update Records by name or email using the Record Upsert API. Prevent duplicates, enforce uniqueness rules, and support reliable integration workflows.

{% hint style="success" %}
**Audience:** Developers and Solution Architects

**Purpose:** Explains how to use the Create or Update <code class="expression">space.vars.entity</code> Upsert API to create or update <code class="expression">space.vars.entities</code> based on lookup identifiers while enforcing uniqueness, permissions, and archive conflict handling.
{% endhint %}

## Overview

Use the **Create or Update Records (Upsert)** endpoint to conditionally create a new <code class="expression">space.vars.entity</code> or update an existing one based on a lookup identifier. Lookup identifiers are governed by <code class="expression">space.vars.object</code>-level uniqueness rules and differ by <code class="expression">space.vars.entity</code> type.

This endpoint is designed for integration workflows that require duplicate prevention and dynamic create-or-update behavior.

The material on this page builds on information covered in [Records Core Concepts](/docs/concepts/objects/records/records-core-concepts) and the [Records Data Model](/docs/concepts/objects/records/records-data-model).

### Why Use This API?

Use the Upsert API when you need to create or update a <code class="expression">space.vars.entity</code> in a single request using a defined identifier.

Common scenarios include:

* Synchronizing data between external systems and the platform
* Preventing duplicate <code class="expression">space.vars.entities</code> during integration workflows
* Updating <code class="expression">space.vars.entities</code> when only a name or email is available
* Supporting incremental or bidirectional synchronization

Upsert achieves the same outcome as performing a Lookup followed by a Create or Update request, but combines matching and modification into a single API call.

Compared to separate lookup and write operations, Upsert:

* Reduces round trips between systems
* Simplifies integration logic
* Minimizes race conditions
* Supports reliable synchronization patterns

Upsert requires a clearly defined identifier strategy to ensure consistent matching behavior.

### **Create or Update Records (Upsert)** API Behavior

Use this endpoint to create or update a <code class="expression">space.vars.entity</code> by providing a lookup identifier. It:

* Evaluates the lookup identifier within the specified <code class="expression">space.vars.object</code>
* Creates a new <code class="expression">space.vars.entity</code> if no matching <code class="expression">space.vars.entity</code> exists
* Updates the existing <code class="expression">space.vars.entity</code> if a match is found
* Returns a response indicating whether a create or update action occurred
* Enforces <code class="expression">space.vars.object</code>-level uniqueness constraints
* Uses <code class="expression">space.vars.entity</code> name for most <code class="expression">space.vars.objects</code> and email for <code class="expression">space.vars.contact</code> <code class="expression">space.vars.entities</code>
* Applies validation rules and required field enforcement
* Respects permission constraints
* Applies archive conflict handling when a matching <code class="expression">space.vars.entity</code> exists in an archived state

***

## Unarchiving Using Entity Create or Upsert

When a lookup identifier matches a record that exists in an archived state, the Upsert endpoint may trigger archive collision behavior.

Depending on the archive conflict mode configured in the request:

* The archived record may be restored
* A new record may be created
* A conflict response may be returned

Archived conflict handling must be explicitly defined in the request. Upsert does not implicitly overwrite or restore archived records without intentional configuration. Developers implementing synchronization workflows should account for archived record scenarios to prevent unintended duplication or data resurrection.

***

## **Create or Update Records (Upsert)** Endpoint

Want to try the API out? Visit our [Swagger](https://app.go.kizen.com/api/docs/public/swagger#/records/records_upsert_create) docs.

## POST /api/records/{object\_identifier}/upsert

> Create or update entity record based on lookup criteria

```json
{"openapi":"3.0.3","info":{"title":"Kizen API","version":"1.0.0"},"security":[{"businessId":[],"userId":[],"apiKey":[]}],"components":{"securitySchemes":{"businessId":{"type":"apiKey","in":"header","name":"X-BUSINESS-ID"}},"schemas":{"EntityRecordUpsertRequest":{"type":"object","properties":{"lookup_value":{"type":"string","minLength":1,"description":"Value to match the entity record (name for custom objects, email for contacts)."},"oncreate_unarchive":{"nullable":true,"description":"Behavior when creating and a matching archived record exists.\n\n* `prompt` - prompt\n* `unarchive` - unarchive\n* `overwrite` - overwrite","oneOf":[{"$ref":"#/components/schemas/OncreateUnarchiveEnum"},{"$ref":"#/components/schemas/NullEnum"}]},"onupdate_archived_conflict":{"nullable":true,"description":"Updates the identifier of matching archived record to not raise a conflict during update.\n\n* `overwrite` - overwrite","oneOf":[{"$ref":"#/components/schemas/OnupdateArchivedConflictEnum"},{"$ref":"#/components/schemas/NullEnum"}]}},"required":["lookup_value"]},"OncreateUnarchiveEnum":{"enum":["prompt","unarchive","overwrite"],"type":"string","description":"* `prompt` - prompt\n* `unarchive` - unarchive\n* `overwrite` - overwrite"},"NullEnum":{"enum":[null]},"OnupdateArchivedConflictEnum":{"enum":["overwrite"],"type":"string","description":"* `overwrite` - overwrite"},"UpsertRecordResponse":{"type":"object","properties":{"object_type":{"type":"string"},"num_upcoming_activities":{"type":"integer"},"fields":{"$ref":"#/components/schemas/Fields"},"id":{"type":"string","format":"uuid"},"client_info":{"$ref":"#/components/schemas/ClientInfo"},"access":{"$ref":"#/components/schemas/AccessSerpy"},"num_associated_team_members":{"type":"integer"},"lead_source_types":{"type":"array","items":{"$ref":"#/components/schemas/LeadSourceType"}},"action":{"$ref":"#/components/schemas/ActionEnum"}},"required":["access","action","client_info","fields","id","lead_source_types","num_associated_team_members","num_upcoming_activities","object_type"]},"Fields":{"type":"object","properties":{"id":{"$ref":"#/components/schemas/SerializedFieldValueDict"}},"required":["id"]},"SerializedFieldValueDict":{"type":"object","properties":{"id":{"type":"string"},"field_type":{"type":"string"},"display_name":{"type":"string"},"value":{"type":"object","additionalProperties":{}}},"required":["display_name","field_type","id","value"]},"ClientInfo":{"type":"object","properties":{"num_addresses_v2":{"type":"integer"},"display_name":{"type":"string"},"email_on_suppression_list":{"type":"boolean"}},"required":["display_name","email_on_suppression_list","num_addresses_v2"]},"AccessSerpy":{"type":"object","properties":{"view":{"type":"boolean"},"edit":{"type":"boolean"},"remove":{"type":"boolean"}},"required":["edit","remove","view"]},"LeadSourceType":{"type":"object","properties":{"value":{"$ref":"#/components/schemas/ValueEnum"},"label":{"type":"string"}},"required":["label","value"]},"ValueEnum":{"enum":["organic_search","direct_traffic","site_referral","facebook_ads","google_ads","social","paid_social","utm","custom"],"type":"string","description":"* `organic_search` - Organic Search\n* `direct_traffic` - Direct Traffic\n* `site_referral` - Site Referral\n* `facebook_ads` - Facebook Ads\n* `google_ads` - Google Ads\n* `social` - Social\n* `paid_social` - Paid Social\n* `utm` - UTM\n* `custom` - Custom"},"ActionEnum":{"enum":["created","updated","unarchived"],"type":"string","description":"* `created` - created\n* `updated` - updated\n* `unarchived` - unarchived"},"ErrorResponse":{"type":"object","properties":{"non_field_errors":{"type":"array","items":{"type":"string"}},"fields":{"type":"array","items":{"$ref":"#/components/schemas/_FieldError"}}},"required":["fields"]},"_FieldError":{"type":"object","description":"This is only used for rendering the error response schema.","properties":{"id":{"type":"array","items":{"type":"string"}},"name":{"type":"array","items":{"type":"string"}},"value":{"oneOf":[{"type":"array","items":{"type":"string"}},{"type":"object","additionalProperties":{"type":"array","items":{"type":"string"}}}],"description":"Given the *incoming* primitive data, return the value for this field\nthat should be validated and transformed to a native value.","readOnly":true},"add_values":{"oneOf":[{"type":"array","items":{"type":"string"}},{"type":"object","additionalProperties":{"type":"array","items":{"type":"string"}}}],"readOnly":true},"remove_values":{"oneOf":[{"type":"array","items":{"type":"string"}},{"type":"object","additionalProperties":{"type":"array","items":{"type":"string"}}}],"readOnly":true}},"required":["add_values","remove_values","value"]}}},"paths":{"/api/records/{object_identifier}/upsert":{"post":{"operationId":"records_upsert_create","description":"Create or update entity record based on lookup criteria","parameters":[{"in":"path","name":"object_identifier","schema":{"type":"string"},"required":true},{"in":"query","name":"return_all_fields","schema":{"type":"boolean"},"description":"If true, return all fields even if not updated"}],"tags":["records"],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/EntityRecordUpsertRequest"}}},"required":true},"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/UpsertRecordResponse"}}},"description":""},"201":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/UpsertRecordResponse"}}},"description":""},"400":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}},"description":""}}}}}}
```

### **Create or Update Records (Upsert)** Schema

## The UpsertRecordResponse object

```json
{"openapi":"3.0.3","info":{"title":"Kizen API","version":"1.0.0"},"components":{"schemas":{"UpsertRecordResponse":{"type":"object","properties":{"object_type":{"type":"string"},"num_upcoming_activities":{"type":"integer"},"fields":{"$ref":"#/components/schemas/Fields"},"id":{"type":"string","format":"uuid"},"client_info":{"$ref":"#/components/schemas/ClientInfo"},"access":{"$ref":"#/components/schemas/AccessSerpy"},"num_associated_team_members":{"type":"integer"},"lead_source_types":{"type":"array","items":{"$ref":"#/components/schemas/LeadSourceType"}},"action":{"$ref":"#/components/schemas/ActionEnum"}},"required":["access","action","client_info","fields","id","lead_source_types","num_associated_team_members","num_upcoming_activities","object_type"]},"Fields":{"type":"object","properties":{"id":{"$ref":"#/components/schemas/SerializedFieldValueDict"}},"required":["id"]},"SerializedFieldValueDict":{"type":"object","properties":{"id":{"type":"string"},"field_type":{"type":"string"},"display_name":{"type":"string"},"value":{"type":"object","additionalProperties":{}}},"required":["display_name","field_type","id","value"]},"ClientInfo":{"type":"object","properties":{"num_addresses_v2":{"type":"integer"},"display_name":{"type":"string"},"email_on_suppression_list":{"type":"boolean"}},"required":["display_name","email_on_suppression_list","num_addresses_v2"]},"AccessSerpy":{"type":"object","properties":{"view":{"type":"boolean"},"edit":{"type":"boolean"},"remove":{"type":"boolean"}},"required":["edit","remove","view"]},"LeadSourceType":{"type":"object","properties":{"value":{"$ref":"#/components/schemas/ValueEnum"},"label":{"type":"string"}},"required":["label","value"]},"ValueEnum":{"enum":["organic_search","direct_traffic","site_referral","facebook_ads","google_ads","social","paid_social","utm","custom"],"type":"string","description":"* `organic_search` - Organic Search\n* `direct_traffic` - Direct Traffic\n* `site_referral` - Site Referral\n* `facebook_ads` - Facebook Ads\n* `google_ads` - Google Ads\n* `social` - Social\n* `paid_social` - Paid Social\n* `utm` - UTM\n* `custom` - Custom"},"ActionEnum":{"enum":["created","updated","unarchived"],"type":"string","description":"* `created` - created\n* `updated` - updated\n* `unarchived` - unarchived"}}}}
```

## The EntityRecordUpsertRequest object

```json
{"openapi":"3.0.3","info":{"title":"Kizen API","version":"1.0.0"},"components":{"schemas":{"EntityRecordUpsertRequest":{"type":"object","properties":{"lookup_value":{"type":"string","minLength":1,"description":"Value to match the entity record (name for custom objects, email for contacts)."},"oncreate_unarchive":{"nullable":true,"description":"Behavior when creating and a matching archived record exists.\n\n* `prompt` - prompt\n* `unarchive` - unarchive\n* `overwrite` - overwrite","oneOf":[{"$ref":"#/components/schemas/OncreateUnarchiveEnum"},{"$ref":"#/components/schemas/NullEnum"}]},"onupdate_archived_conflict":{"nullable":true,"description":"Updates the identifier of matching archived record to not raise a conflict during update.\n\n* `overwrite` - overwrite","oneOf":[{"$ref":"#/components/schemas/OnupdateArchivedConflictEnum"},{"$ref":"#/components/schemas/NullEnum"}]}},"required":["lookup_value"]},"OncreateUnarchiveEnum":{"enum":["prompt","unarchive","overwrite"],"type":"string","description":"* `prompt` - prompt\n* `unarchive` - unarchive\n* `overwrite` - overwrite"},"NullEnum":{"enum":[null]},"OnupdateArchivedConflictEnum":{"enum":["overwrite"],"type":"string","description":"* `overwrite` - overwrite"}}}}
```

## The ErrorResponse object

```json
{"openapi":"3.0.3","info":{"title":"Kizen API","version":"1.0.0"},"components":{"schemas":{"ErrorResponse":{"type":"object","properties":{"non_field_errors":{"type":"array","items":{"type":"string"}},"fields":{"type":"array","items":{"$ref":"#/components/schemas/_FieldError"}}},"required":["fields"]},"_FieldError":{"type":"object","description":"This is only used for rendering the error response schema.","properties":{"id":{"type":"array","items":{"type":"string"}},"name":{"type":"array","items":{"type":"string"}},"value":{"oneOf":[{"type":"array","items":{"type":"string"}},{"type":"object","additionalProperties":{"type":"array","items":{"type":"string"}}}],"description":"Given the *incoming* primitive data, return the value for this field\nthat should be validated and transformed to a native value.","readOnly":true},"add_values":{"oneOf":[{"type":"array","items":{"type":"string"}},{"type":"object","additionalProperties":{"type":"array","items":{"type":"string"}}}],"readOnly":true},"remove_values":{"oneOf":[{"type":"array","items":{"type":"string"}},{"type":"object","additionalProperties":{"type":"array","items":{"type":"string"}}}],"readOnly":true}},"required":["add_values","remove_values","value"]}}}}
```

***

## What’s Next

After implementing Create or Update <code class="expression">space.vars.entities</code> (Upsert) workflows, you can:

* Retrieve a <code class="expression">space.vars.entity</code> by name or email to confirm matching behavior
* Use ID-based endpoints to perform targeted updates or lifecycle actions
* Add new <code class="expression">space.vars.entities</code> explicitly when guaranteed creation is required
* Search <code class="expression">space.vars.entities</code> for multi-record filtering and validation
* Incorporate Upsert workflows into schema-aware integrations

For more information on <code class="expression">space.vars.entity</code> operations, see the related <code class="expression">space.vars.entities</code> API topics below:

<details>

<summary>Related Topics</summary>

* [Add Records API ](/docs/concepts/objects/records/records-apis/add-records-api)
* [Manage Records by ID API](/docs/concepts/objects/records/records-apis/manage-records-by-id-api)
* [Lookup Record API](/docs/concepts/objects/records/records-apis/lookup-record-api)&#x20;
* [Search Records API](/docs/concepts/objects/records/records-apis/search-records-api)

</details>


# Team Interactions in Records

Team Interactions guide explaining how user interactions create record associations, affect “My Associated Records” visibility, and interact with permissions and relationship inheritance.

{% hint style="success" %}
**Audience:** Administrators, Developers, Solution Architects

**Purpose:** Explains how user interactions create or update <code class="expression">space.vars.entity</code> associations and how those associations influence visibility and access across the platform.
{% endhint %}

## Overview

Team interactions are user-driven activities that establish or reinforce associations with a <code class="expression">space.vars.entity</code>. They signal participation and influence how visibility is evaluated under **My Associated Records** scope.

An interaction:

* Indicates engagement with a <code class="expression">space.vars.entity</code>
* Creates or reinforces an association
* Supports collaborative <code class="expression">space.vars.workflows</code>
* Intersects with permission evaluation

However, association and interaction are not identical:

* An interaction generates an association
* A user can be associated with a <code class="expression">space.vars.entity</code> without having interacted with it

Interactions operate within a layered visibility model that includes:

* Ownership
* Direct associations
* Relationship-based inheritance
* Permission Groups

Interactions contribute to association logic but do not override permission configuration.

***

## What Qualifies as an Interaction

An interaction is an action that meaningfully modifies, logs, or contributes to a <code class="expression">space.vars.entity</code>’s timeline history.

Examples include:

* Modifying a <code class="expression">space.vars.entity</code> (field updates, stage changes)
* Logging an <code class="expression">space.vars.activity</code>
* Adding notes or comments
* Starting an <code class="expression">space.vars.automation</code> from the <code class="expression">space.vars.entity</code> (when executed in user context)

Most interactions correspond to entries in the <code class="expression">space.vars.entity</code> <code class="expression">space.vars.timeline</code>.

{% hint style="info" %}
**Note:** Viewing a <code class="expression">space.vars.entity</code> does not create an association. Only user-driven interactions generate associations.
{% endhint %}

***

## How Associations Are Created

When a user interacts with a <code class="expression">space.vars.entity</code>, the platform may create or update an association between that user and the <code class="expression">space.vars.entity</code>. Associations fall into two categories:

### Direct Associations

Created when a user:

* Is assigned as the owner
* Is added through a team selector or user field
* Logs an activity tied to the <code class="expression">space.vars.entity</code>
* Modifies the <code class="expression">space.vars.entity</code>

Direct associations:

* Are stored on and editable from the <code class="expression">space.vars.entity</code>
* Are evaluated during permission checks

### Inherited Associations

Derived from relationships with other <code class="expression">space.vars.entities</code>. For example:

* An Agent associated with a Client
* A Policy related to a Client
* A Deal related to an Account

If a user is associated with a parent <code class="expression">space.vars.entity</code>, they may inherit association to related child <code class="expression">space.vars.entities</code> depending on relationship configuration and permission scope.

It's important to note that:

* Inherited associations cannot be edited from the child <code class="expression">space.vars.entity</code>
* They must be modified at the source (the related parent <code class="expression">space.vars.entity</code>)

#### Interaction Reinforcement & Role Visibility Within the Association

If a user is already associated with a <code class="expression">space.vars.entity</code>:

* Additional interactions reinforce participation history
* Duplicate associations are not created

Association alone does not guarantee visibility. Access still depends on:

* <code class="expression">space.vars.object</code>-level permissions
* &#x20;Whether the **My Associated Records** scope is enabled in the user’s Permission Group
* Field-level permissions
* Action permissions

Association qualifies a <code class="expression">space.vars.entity</code> for evaluation under **My Associated Records**. It does not independently grant access.

***

## Timeline Sharing and Relationship Effects

Relationships can extend visibility beyond a single <code class="expression">space.vars.entity</code>. When relationship configurations enable <code class="expression">space.vars.timeline</code> sharing:

* <code class="expression">space.vars.timeline</code> events from one related <code class="expression">space.vars.entity</code> may appear on another <code class="expression">space.vars.entity</code> when <code class="expression">space.vars.timeline</code> sharing is enabled
* These events may predate the child <code class="expression">space.vars.entity</code>’s creation

<code class="expression">space.vars.timeline</code> sharing is controlled by relationship configuration. <code class="expression">space.vars.activity</code> from one related <code class="expression">space.vars.entity</code> may appear on another <code class="expression">space.vars.entity</code>, even if it occurred earlier. This can influence how participation appears in reporting or portal contexts.

For relationship structure and inheritance configuration, see [Object Relationships](/docs/concepts/objects/object-configuration/object-relationships).

***

## Agentic Workflows and Interaction Context

<code class="expression">space.vars.automations</code> run in a separate execution context.

Implications:

* <code class="expression">space.vars.automation</code>-triggered updates may create <code class="expression">space.vars.timeline</code> entries, but do not create user associations.

In most cases:

* Edit access is required to start an <code class="expression">space.vars.automation</code> on a <code class="expression">space.vars.entity</code>.
* Custom actions can grant limited permission to run specific <code class="expression">space.vars.automations</code>.

When designing visibility rules based on associations, consider how <code class="expression">space.vars.automations</code> may create, update, or modify <code class="expression">space.vars.entities</code> in ways that affect who can see them.&#x20;

For more information, see [Agentic Workflows](/docs/concepts/agentic-workflows).

***

## Important Considerations

When designing collaboration and access strategies:

* Interactions do not override Permission Groups.
* A user must have permission to access the <code class="expression">space.vars.object</code> itself (such as Clients, Deals, or Policies) and must also meet the <code class="expression">space.vars.entity</code>-level scope requirements (**All Records** or **My Associated Records**).
* Removing a direct association may remove visibility under **My Associated Records**.
* Inherited associations must be modified at their source relationship.
* Sharing team associations across related <code class="expression">space.vars.objects</code> can significantly expand who qualifies for visibility, making access behavior harder to predict.&#x20;
* Shared <code class="expression">space.vars.timeline</code> <code class="expression">space.vars.activity</code> can affect how past engagement appears.

Architectural clarity prevents unpredictable access behavior across UI, <code class="expression">space.vars.automation</code>, reporting, and API usage.

***

## What’s Next

Understanding Team Interactions ensures that administrators design predictable access strategies, architects model relationships responsibly, and developers anticipate visibility behavior when interacting with <code class="expression">space.vars.entities</code> programmatically.

To understand how interaction and association behavior surfaces in API responses or learn about <code class="expression">space.vars.entities</code> more generally, explore the topics below:

<details>

<summary>Related Topics</summary>

* [Records Core Concept](/docs/concepts/objects/records/records-core-concepts)
* [Records Data Model](/docs/concepts/objects/records/records-data-model)
* [Record Permissions](/docs/concepts/objects/records/record-permissions)
* [Record APIs](/docs/concepts/objects/records/records-apis)

</details>


# Record Permissions

Learn how record permissions control data visibility, record-level access, bulk actions, and API behavior within a layered object and role-based security model.

{% hint style="success" %}
**Audience:** Admins, Developers, Solution Architects

**Purpose:** Explains how <code class="expression">space.vars.entity</code>-level permissions govern visibility and actions across the platform and how they intersect with <code class="expression">space.vars.object</code> permissions, relationships, teams, <code class="expression">space.vars.automations</code>, and APIs.
{% endhint %}

## Overview

<code class="expression">space.vars.entity</code> permissions determine who can see and act on <code class="expression">space.vars.entity</code>s within an <code class="expression">space.vars.object</code>.

Permissions are evaluated through a layered model:

1. <code class="expression">space.vars.object</code>-level access
2. <code class="expression">space.vars.entity</code>-level scope
3. Action permissions (single and bulk)
4. Field-level permissions

Each <code class="expression">space.vars.object</code> supports two primary <code class="expression">space.vars.entity</code> scopes:

* **All Records**
* **My Associated Records**

These scopes can be assigned different access levels within a Permission Group. <code class="expression">space.vars.entity</code> permissions are critical for:

* Controlling data visibility
* Governing bulk operations
* Managing <code class="expression">space.vars.automation</code> behavior
* Preserving archive integrity and audit history

For more information on how permissions relate to <code class="expression">space.vars.object</code>s, review [Object Permissions](/docs/concepts/objects/object-configuration/object-permissions).

***

## Record Permissions

<code class="expression">space.vars.entity</code>-level permissions are configured within each individual <code class="expression">space.vars.object</code>’s settings or from the Permission Groups Modal. These permissions control which users can access and manage that <code class="expression">space.vars.object</code>’s configuration and what permissions they have within that <code class="expression">space.vars.object</code>.

These permissions determine whether users can:

* View All <code class="expression">space.vars.entity</code>s or only associated <code class="expression">space.vars.entity</code>s
* Edit, Create, Delete or Unarchive <code class="expression">space.vars.entity</code>s
* Access <code class="expression">space.vars.entity</code> views and actions (single or bulk)
* Modify <code class="expression">space.vars.automations</code>
* Configure default field permissions

These permissions are configured per <code class="expression">space.vars.object</code> and can vary across different Permission Groups. For example:

* Two <code class="expression">space.vars.object</code>s may both be visible to a user, but only one allows <code class="expression">space.vars.entity</code> creation.
* One <code class="expression">space.vars.object</code> may allow exports while another blocks exports.
* A user may be able to view <code class="expression">space.vars.entity</code>s but not archive or upload them.

### How Configuration and Record Permissions Interact

<code class="expression">space.vars.object</code> configuration permissions and <code class="expression">space.vars.entity</code> data permissions control different behaviors.

| **Object Configuration Permissions** | <code class="expression">space.vars.object</code> structure and configuration                                                  | <ul><li>Edit <code class="expression">space.vars.object</code> settings</li><li>Configure fields</li><li>Customize layouts</li><li>Manage <code class="expression">space.vars.object</code>-level permissions</li></ul>                                                                                                             | <ul><li>Visibility of individual <code class="expression">space.vars.entity</code>s</li><li><code class="expression">space.vars.entity</code>-level actions</li></ul> |
| ------------------------------------ | ------------------------------------------------------------------------------------------------------------------------------ | ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | --------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| **Record Permissions**               | <code class="expression">space.vars.entity</code> data and actions within an <code class="expression">space.vars.object</code> | <ul><li>View <code class="expression">space.vars.entity</code>s within an association scope (All or My Associated)</li><li>Create, edit, archive, delete <code class="expression">space.vars.entity</code>s</li><li>Perform single-<code class="expression">space.vars.entity</code> actions</li><li>Perform bulk actions</li></ul> | Editing <code class="expression">space.vars.object</code> structure or settings                                                                                       |

Since these permissions are evaluated independently, misalignment can lead to confusing behavior. For example:

* A user may be able to modify object settings but see no <code class="expression">space.vars.entity</code>s.
* A user may see records but be unable to edit the <code class="expression">space.vars.object</code> configuration.
* API calls may return empty results if record-level access is restricted, even when <code class="expression">space.vars.object</code> visibility is enabled.

When troubleshooting access issues, verify both <code class="expression">space.vars.object</code> configuration permissions and <code class="expression">space.vars.entity</code> data permissions.

***

## How Record Permissions Work

Each <code class="expression">space.vars.object</code> includes separate permission rows for:

* **All \[Object Name] Records**
* **My \[Object Name] Associated Records**

Administrators can assign different access levels to each scope. For example:

* View access to All <code class="expression">space.vars.entity</code>s
* Create/Edit access to My Associated <code class="expression">space.vars.entity</code>s

This allows broad visibility while restricting modification rights to associated records.

<details>

<summary>Configuring Record Permissions</summary>

#### 1. Select settings in Kizen's navigation

<div data-with-frame="true"><figure><img src="/files/EqStR18j0IeuEdXNUMfd" alt="" width="563"><figcaption></figcaption></figure></div>

#### 2. Go to Team, Roles, & Permissions

Navigate to the **Permissions Group** subtab.

<figure><img src="/files/qgfAE4fo4A4R9XOUA0Fc" alt=""><figcaption></figcaption></figure>

#### 3. Select New Permission Group

<div data-with-frame="true"><figure><img src="/files/vP4iaBDFejieqSxvUfHn" alt="" width="563"><figcaption></figcaption></figure></div>

#### **4. Scroll down and toggle on the Record Permissions you want to add.**

In the example shown, **Custom Object - Products** is selected.

<div data-with-frame="true"><figure><img src="/files/3T4hJgBfunKGB07xp9nV" alt="" width="563"><figcaption></figcaption></figure></div>

#### 5. Select the drop-down arrow on the Record Permission you're editing

Selecting the arrow will show a drop-down of the various permissions that can be set.

<div data-with-frame="true"><figure><img src="/files/3BoRLnCH1TPEZsBhvcTU" alt="" width="563"><figcaption></figcaption></figure></div>

#### 6. Edit permissions for your Record

<div data-with-frame="true"><figure><img src="/files/syJdfHY91eRX8VIq3HHy" alt="" width="563"><figcaption></figcaption></figure></div>

You can now edit permissions on your <code class="expression">space.vars.entity</code>s.

</details>

### Tiered Access Levels

Each scope row uses tiered access levels:

* **None**
* **View**
* **Create/Edit**
* **Delete/All**

These levels determine the degree of access within that scope. Delete/All represents the highest access level within a scope row and governs <code class="expression">space.vars.entity</code>-level deletion or archive capability for that scope.

### What “My Associated Records” Means

“My Associated <code class="expression">space.vars.entity</code>s” grants access only to <code class="expression">space.vars.entities</code> where the user is the owner, explicitly assigned as a team member, or inherits access through a defined relationship.

Association may include:

* <code class="expression">space.vars.entity</code> ownership (Owner field)
* Explicit team association
* Relationship-based inherited association

Associations determine whether a record falls within a user’s “My Associated <code class="expression">space.vars.entity</code>s” scope.

An interaction (such as modifying a record or logging activity) generates an association. However, a user can be associated with a record without having directly interacted with it. To learn more, check out Team Interactions in Records (**Coming Soon**).

See [Object Relationships](/docs/concepts/objects/object-configuration/object-relationships) for details on how relationship modeling affects inherited access.

#### Unarchive Permissions

Unarchive permissions are explicitly separated into:

* Unarchive Any <code class="expression">space.vars.entity</code>
* Unarchive My <code class="expression">space.vars.entity</code>s

Unarchive is not implied by Create/Edit access and must be granted independently.

When a record is archived, its owner and team associations are preserved so that unarchive permissions can be enforced correctly. Archived <code class="expression">space.vars.entity</code>s do not appear in active <code class="expression">space.vars.entity</code> views.

#### Record Creation

<code class="expression">space.vars.entity</code> creation is controlled separately through: Create New <code class="expression">space.vars.entity</code>s

Create permission is not automatically implied by other scope settings and must be explicitly granted.

***

## Record-Specific Permission Areas

<code class="expression">space.vars.entity</code> permissions are configured inside Permission Groups and intersect with <code class="expression">space.vars.object</code>-level configuration.

### Record Overview Permissions

Access to <code class="expression">space.vars.entity</code> view types is permissioned separately from record visibility. Under <code class="expression">space.vars.entity</code> Overview, administrators can configure access to:

* Chart View
* Board View
* Quick Filters

Users may have record access but be restricted from specific view modes.

### Single Record Actions

Single-<code class="expression">space.vars.entity</code> permissions control actions performed on an individual <code class="expression">space.vars.entity</code>. These permissions determine which action controls appear on the <code class="expression">space.vars.entity</code> detail page.

Single-<code class="expression">space.vars.entity</code> permissions include:

* Modify <code class="expression">space.vars.automation</code>
* Team Associations
* View Timeline

For Contact <code class="expression">space.vars.entity</code>s, additional single-<code class="expression">space.vars.entity</code> actions are available, including:

* Send Single Message (email or SMS)
* Manage Subscription Status
* Access communication history

For more details, see [Contact Permissions](/docs/concepts/objects/contacts/contact-permissions).

### Agentic Workflow Overlap

Starting an <code class="expression">space.vars.automation</code> generally requires Create/Edit access to the <code class="expression">space.vars.entity</code>.

<code class="expression">space.vars.automations</code> execute in a separate permission context. Users who can modify <code class="expression">space.vars.automations</code> may be able to cause record changes that exceed their normal UI editing permissions.

Custom Actions can expose specific <code class="expression">space.vars.automations</code> and may allow execution with more limited access. Permission to modify <code class="expression">space.vars.automations</code> should be treated as an elevated capability. For more detail, see Agentic Workflow Actions **(Topic Coming Soon)**.

### Record-Specific Bulk Actions

Bulk permissions are grouped separately under **Perform Bulk Actions**.

Bulk permissions include:

* Change Field Value
* Modify <code class="expression">space.vars.automation</code>
* Add Team Associations
* Export to CSV
* Archive Records
* Upload Records

Bulk permissions are configured separately from single-record permissions, but they are constrained by record-level scope access. If a user does not have sufficient scope access (such as Create/Edit or Delete/All), corresponding bulk actions will not be available.

Because bulk operations can affect large numbers of <code class="expression">space.vars.entity</code>s, they should be granted intentionally and aligned with appropriate scope access.

***

## Field-Level Permissions Interaction

<code class="expression">space.vars.entity</code> permissions operate alongside field-level permissions.

Field-level permissions are evaluated after <code class="expression">space.vars.entity</code>-level access is granted.

Within a Permission Group, administrators can configure:

* Default access level for new fields
* Individual field permissions (None, View, Create/Edit)

Field-level permissions apply to both default and custom fields. Even if a user has <code class="expression">space.vars.entity</code>-level access, certain fields may remain hidden or read-only.&#x20;

Files include a specific Delete permission at the field level that enables hard deletion of a file rather than simply unlinking it from a <code class="expression">space.vars.entity</code>.

***

## Record Permissions in API Responses

<code class="expression">space.vars.entity</code> permissions are enforced consistently across the UI and APIs. Effective permissions are evaluated at request time.

API responses include an `access` <code class="expression">space.vars.object</code> indicating <code class="expression">space.vars.entity</code>-level permissions (such as view, edit, remove). If a user lacks permission:

* <code class="expression">space.vars.entity</code>s may not appear in search results
* Update operations may fail
* Action-based operations may be rejected

Most <code class="expression">space.vars.entity</code> APIs require specifying which fields to return rather than returning all fields by default. For endpoint details, see [Record APIs](/docs/concepts/objects/records/records-apis).

***

## Important Considerations

Keep the following in mind when configuring or troubleshooting record permissions:

* Platform-level <code class="expression">space.vars.object</code> access does not imply <code class="expression">space.vars.entity</code>-level access.
* Access to a record does not automatically grant access to view modes, single-<code class="expression">space.vars.entity</code> actions, bulk operations, or field-level editing.
* Association modeling directly impacts visibility.
* <code class="expression">space.vars.automation</code> and bulk permissions can significantly expand user impact.
* Missing <code class="expression">space.vars.entity</code>s or fields often indicate permission restrictions, not missing data.
* Integrations should evaluate access flags before attempting write operations.

Permission misconfiguration is a common cause of empty UI states and empty API responses.

***

## What’s Next

Next, review [Record APIs](/docs/concepts/objects/records/records-apis) to understand how <code class="expression">space.vars.entities</code> are created, retrieved, updated, archived, and managed programmatically or you can continue exploring other <code class="expression">space.vars.entities</code> documentation with the topics below:

<details>

<summary>Related Topics</summary>

* [Records](/docs/concepts/objects/records)
* [Record Operations](broken://pages/I9VbT9OrruO3QISn2RHF)
* [Records Core Concepts](/docs/concepts/objects/records/records-core-concepts)
* [Records Data Model](/docs/concepts/objects/records/records-data-model)

</details>


# Activities

Defines Activities in Kizen and outlines the full scope of Activity mastery, including core concepts, data model structure, permissions, APIs, automations, webhooks, and integrations

## Overview

<code class="expression">space.vars.activities</code> are a core platform data type in <code class="expression">space.vars.Kizen\_company\_name</code> used to track human interactions and events associated with <code class="expression">space.vars.contacts</code> and <code class="expression">space.vars.object</code> <code class="expression">space.vars.entities</code>.

While the <code class="expression">space.vars.activity</code> concept is defined by the platform, each <code class="expression">space.vars.activity</code> is created from a configurable <code class="expression">space.vars.activity</code> <code class="expression">space.vars.object</code> that determines its schema, fields, and allowed associations. Together, <code class="expression">space.vars.activities</code> establish a structured engagement history that supports <code class="expression">space.vars.timelines</code>, <code class="expression">space.vars.automations</code>, reporting, and API-based integrations.

### Activities Mastery Checklist

Explore the following topics to understand how <code class="expression">space.vars.activities</code> are defined and used in <code class="expression">space.vars.Kizen\_company\_name</code>.

#### Core Knowledge

* [ ] [What an Activity represents and when to use it](/docs/concepts/activities/activities-core-concepts#why-activities-matter)
* [ ] [The difference between Scheduled and Logged Activities](https://developer.kizen.com/docs/concepts/pages/ym0ClLF9SGmtEOvHNsvA#scheduled-vs.-logged-activities)
* [ ] [How Activities function as an event layer across the platform](/docs/concepts/activities/activities-core-concepts#system-behavior)

#### Configuration & Data Model

* [ ] [How Activity Objects define schemas and associations](/docs/concepts/activities/activities-data-model#data-structure)
* [ ] [How Activities relate to Contacts and Objects](/docs/concepts/activities/activities-data-model#record-associations)
* [ ] [How Activity field types are defined](/docs/concepts/activities/activities-data-model#activity-field-types)

#### Access & Control

* [ ] [How permissions affect creating, viewing, and modifying Activities](/docs/concepts/activities/activity-permissions)
* [ ] [How access to associated records impacts visibility](/docs/concepts/activities/activity-permissions#object-level-permissions-and-activities)

#### APIs & Webhooks

* [ ] [How to Schedule Activities via API](/docs/concepts/activities/activities-api-and-webhooks/schedule-activities-api)
* [ ] [How to list Scheduled Activities via API](/docs/concepts/activities/activities-api-and-webhooks/list-scheduled-activities-api)
* [ ] [How to view Logged Activity details](/docs/concepts/activities/activities-api-and-webhooks/view-logged-activity-details-api)
* [ ] [When webhook events are emitted](/docs/concepts/activities/activities-api-and-webhooks/triggering-external-activity-workflows-with-webhooks#overview)

#### Agentic Workflows

* [ ] [How Activity lifecycle events trigger Agentic Workflows](/docs/concepts/activities/activities-data-model#activity-lifecycle)

***

## What's Next

Get started with [Activity Core Concepts](/docs/concepts/activities) to learn the foundational definitions and behavior of <code class="expression">space.vars.activities</code>, including:

* What qualifies as an <code class="expression">space.vars.activity</code>
* How <code class="expression">space.vars.activity</code> <code class="expression">space.vars.objects</code> shape <code class="expression">space.vars.activity</code> structure
* The distinction between Scheduled and Logged <code class="expression">space.vars.activities</code>
* How <code class="expression">space.vars.activities</code> relate to other <code class="expression">space.vars.entities</code> in the data model

The core concepts page establishes the baseline needed before exploring <code class="expression">space.vars.activity</code> configuration, permissions, APIs, and integrations.

<details>

<summary>Related Topics</summary>

* [Activities Core Concepts](/docs/concepts/activities/activities-core-concepts)
* [Activities Data Model](/docs/concepts/activities/activities-data-model)
* [Activity Permissions](/docs/concepts/activities/activity-permissions)
* [Advanced Activity Rules](/docs/concepts/activities/advanced-activity-rules)
* [Activities API & Webhooks](/docs/concepts/activities/activities-api-and-webhooks)

</details>


# Activities Core Concepts

Explains what Activities are in Kizen, what data they contain, how scheduled and logged Activities behave, and how they support automations, APIs, webhooks, reporting, and real-world workflows.

{% hint style="success" %}
**Audience:** Technical Builders, Implementors, and Developers

**Purpose:** Explains how <code class="expression">space.vars.activities</code> function within <code class="expression">space.vars.Kizen\_company\_name</code>’s data model, so builders can design reliable <code class="expression">space.vars.automations</code>, integrations, and API workflows.
{% endhint %}

## Overview

An <code class="expression">space.vars.activity</code> represents a human-initiated interaction or a planned touchpoint. Each <code class="expression">space.vars.activity</code> is an instance of its respective <code class="expression">space.vars.activity</code> <code class="expression">space.vars.object</code>, which defines the schema, required fields, and allowed associations for a given <code class="expression">space.vars.activity</code> type.

Each <code class="expression">space.vars.activity</code> contains:

* **System Fields:** Fields that define the <code class="expression">space.vars.activity</code>’s identity, scheduling, and associations, such as:
  * <code class="expression">space.vars.activity</code> name (for example, call, meeting, inspection)
  * One or more associated <code class="expression">space.vars.entities</code> (such as a <code class="expression">space.vars.contact</code> or <code class="expression">space.vars.object</code>), all <code class="expression">space.vars.entities</code> of an <code class="expression">space.vars.object</code> type, or no associated <code class="expression">space.vars.entities</code>
  * Timestamps (`due_datetime`, `logged_at`)
* **Activity Fields:** Fields that are defined and stored directly on the <code class="expression">space.vars.activity</code> <code class="expression">space.vars.entity</code>, including:
  * Notes and descriptions
  * Participants or mentions
  * Categories or tags applied to the <code class="expression">space.vars.activity</code>
* **Custom Fields:** Fields that are displayed and editable from the <code class="expression">space.vars.activity</code>, but whose values are stored on a related <code class="expression">space.vars.object</code>. These are any <code class="expression">space.vars.fields</code> configured for the <code class="expression">space.vars.activity</code> type.

#### System Behavior

Once an <code class="expression">space.vars.activity</code> has been created (either logged or scheduled), an <code class="expression">space.vars.activity</code>:

* Appears on each associated <code class="expression">space.vars.entities</code> <code class="expression">space.vars.timeline</code>
* Can trigger <code class="expression">space.vars.automations</code>
* Updates reporting datasets
* Is accessible via API, <code class="expression">space.vars.automations</code>, or UI
* Sends webhook events (only when logged)

***

## Why Activities Matter

<code class="expression">space.vars.activities</code> help teams understand the full context of each associated <code class="expression">space.vars.entity</code>, including:

* Shared interaction history: <code class="expression">space.vars.activities</code> provide a chronological <code class="expression">space.vars.entity</code> of human interactions associated with a <code class="expression">space.vars.entity</code>.
* Clear task management: Scheduled and Logged <code class="expression">space.vars.activities</code> distinguish to-do tasks from completed tasks.
* Flexible activity trackin&#x67;**:** <code class="expression">space.vars.activities</code> can represent work beyond communication, such as internal tasks, follow-ups, reviews, or reminders, and may be associated with <code class="expression">space.vars.contacts</code>, <code class="expression">space.vars.entities</code>, or stand alone.
* Standardized engagement data: <code class="expression">space.vars.activity</code> Objects define consistent schemas for capturing calls, meetings, and other touch points.
* Reliable handoffs: <code class="expression">space.vars.activities</code> preserve context, outcomes, and ownership so work can continue without reconstruction.
* <code class="expression">space.vars.automation</code> and integration hooks: <code class="expression">space.vars.activity</code> lifecycle events can trigger <code class="expression">space.vars.automations</code> or external <code class="expression">space.vars.workflows</code> via APIs and webhooks.
* Reporting and analytics inputs: <code class="expression">space.vars.activities</code> supply structured engagement data for <code class="expression">space.vars.dashboards</code>, reports, and operational metrics.

***

## Scheduled vs. Logged Activities

A Scheduled <code class="expression">space.vars.activity</code> represents a human interaction that has not yet occurred or a to-do task, while a Logged <code class="expression">space.vars.activity</code> represents a completed interaction or task. A Scheduled <code class="expression">space.vars.activity</code> *transitions into* a Logged <code class="expression">space.vars.activity</code> once the task has been completed and the outcome is recorded.&#x20;

This transition affects how the <code class="expression">space.vars.activity</code> behaves in the system:&#x20;

* Scheduled <code class="expression">space.vars.activities</code> are mutable and used for planning
* Logged <code class="expression">space.vars.activities</code> are immutable and serve as a historical <code class="expression">space.vars.entity</code>.&#x20;

Lifecycle transitions can trigger <code class="expression">space.vars.automations</code>, webhooks, and reporting updates. The differences between the two are outlined below.

| Attribute                  | Scheduled Activity                            | Logged Activity                                |
| -------------------------- | --------------------------------------------- | ---------------------------------------------- |
| **What it represents**     | An interaction or task planned for the future | An interaction or task that has occurred       |
| **Lifecycle state**        | Pre-execution                                 | Post-execution                                 |
| **When it's created**      | Before the interaction or task                | After the interaction or task                  |
| **Primary timestamps**     | `due_datetime`                                | `logged_at` / `completed_at`                   |
| **Mutability**             | Can be updated, rescheduled, or canceled      | Can only be appended to                        |
| **Timeline behavior**      | Appears as upcoming                           | Appears as completed                           |
| **Agentic Workflow usage** | Drives reminders and time-based triggers      | Drives completion-based triggers and reporting |
| **State transition**       | Converts to a Logged Activity when completed  | Does not transition to another state           |
| **Trigger Webhooks**       | Cannot trigger webhooks                       | Can trigger webhooks                           |

***

## How Activities are Used

<code class="expression">space.vars.activities</code> appear across multiple areas of the <code class="expression">space.vars.Kizen\_company\_name</code> platform, allowing the same interaction data to support planning, execution, visibility, and automation.

### **Calendars**

<code class="expression">space.vars.activities</code> with a scheduled date and time appear on calendars. This helps teams see upcoming tasks, plan capacity, and manage time-based commitments without duplicating data in a separate scheduling system.

### **Agentic Workflows**

<code class="expression">space.vars.activities</code> can trigger <code class="expression">space.vars.automations</code> or be created by them. This allows workflows to respond to real interactions, such as sending follow-ups after a call is logged or scheduling reminders when an <code class="expression">space.vars.activity</code> is created. <code class="expression">space.vars.activity</code> lifecycle events, such as creation, updates, and completion, can trigger <code class="expression">space.vars.automations</code> within <code class="expression">space.vars.Kizen\_company\_name</code> or be consumed via APIs and webhooks by external systems.

### **Dashboards**

<code class="expression">space.vars.activity</code> data feeds dashboards and reports. Teams can measure volume, timing, completion rates, and outcomes of interactions to understand performance and operational trends.

### **Timelines**

<code class="expression">space.vars.activities</code> appear in Timelines alongside other relevant events. This gives teams a chronological view of what happened and what’s planned, providing full context for each <code class="expression">space.vars.contact</code> or <code class="expression">space.vars.entity</code>.

These surfaces reflect <code class="expression">space.vars.activity</code> data but do not own it. The <code class="expression">space.vars.activity</code> <code class="expression">space.vars.entity</code> remains the source of truth.

***

## Key Use Cases

From a builder or system perspective, <code class="expression">space.vars.activities</code> support workflows such as:

* Workflow management (sales calls, demos, negotiations)
* Service delivery tracking (on-site visits, inspections, appointments)
* Support processes (case updates, customer follow-ups)
* Compliance workflows (document reviews, required touch points)
* Operational logging (visit logs, check-ins, approvals)
* Engagement-based <code class="expression">space.vars.automations</code> (triggering workflows from <code class="expression">space.vars.activity</code> events)

Because <code class="expression">space.vars.activities</code> are exposed through APIs and <code class="expression">space.vars.automations</code>, they function as a shared engagement object across the entire platform.

### Industry Examples

<code class="expression">space.vars.activities</code> are flexible and can support any workflow. These short examples highlight how three different industries use <code class="expression">space.vars.activities</code> to capture human interactions.

{% tabs %}
{% tab title="Insurance" %}

#### Insurance Teams Managing Policyholder Interactions

Insurance workflows use <code class="expression">space.vars.activities</code> to capture structured <code class="expression">space.vars.entities</code> of every interaction across the policy lifecycle, supporting underwriting, compliance, renewals, and automation.

**Examples include:**

* Logging an Initial Coverage Consultation documenting coverage needs, risk factors, and existing policies
* Recording a Quote Review Call with pricing options, endorsements, and requested changes
* Logging an Underwriting Follow-Up to track required documents or clarifications
* Scheduling a Policy Renewal Outreach <code class="expression">space.vars.activity</code> tied to expiration dates and retention workflows

**How Activities help:**

* Provide a complete, auditable history of policyholder interactions for regulatory and internal review
* Standardize engagement data across agents to ensure consistent policy handling
* Drive <code class="expression">space.vars.automations</code> (e.g., underwriting reminders, renewal notices, lapse prevention workflows)
* Synchronize policyholder interaction data across CRM, underwriting systems, and external platforms via APIs and webhook events
  {% endtab %}

{% tab title="Healthcare" %}

#### Healthcare Teams Managing Beneficiary Interactions

Enrollment and care-management workflows use <code class="expression">space.vars.activities</code> to capture structured <code class="expression">space.vars.entities</code> of every interaction with a member, supporting compliance, consistency, and automation.

**Examples include:**

* Logging an Initial Coverage Consultation with plan options discussed
* Recording a Follow-Up <code class="expression">space.vars.activity</code> confirming doctors, prescriptions, and pharmacies
* Logging a Plan Recommendation Review meeting with documented outcomes
* Scheduling an Enrollment Deadline Reminder <code class="expression">space.vars.activity</code> tied to cutoff dates

**How Activities help:**

* Provide a complete audit trail required for regulatory and CMS compliance
* Standardize interaction data across agents for consistent member guidance
* Drive automations (e.g., follow-up reminders, missing-document alerts, enrollment workflows)
* Keep beneficiary <code class="expression">space.vars.entities</code> synchronized across systems using webhook events&#x20;
  {% endtab %}

{% tab title="Financial Services" %}

#### Financial Services Teams Managing Client Interactions

Financial advisory workflows rely on <code class="expression">space.vars.activities</code> to create compliant, structured <code class="expression">space.vars.entities</code> of every client interaction that influences investment strategy or regulatory reporting.

**Examples include:**

* Logging a Quarterly Portfolio Review with performance notes and agreed actions
* Scheduling a Risk Tolerance Review <code class="expression">space.vars.activity</code> triggered by life-event changes
* Recording an in-person Account Update <code class="expression">space.vars.activity</code> with required verification fields
* Logging a Follow-Up <code class="expression">space.vars.activity</code> after sending recommendations or disclosures

**How Activities help:**

* Create a chronological audit trail required for compliance and advisory oversight
* Standardize client interaction data used in suitability checks and planning workflows
* Trigger <code class="expression">space.vars.automations</code> for follow-ups, document requests, or portfolio review cycles
* Sync engagement data to external advisory platforms via webhooks
  {% endtab %}
  {% endtabs %}

***

## What's Next?

Continue to the [Activities Data Model](/docs/concepts/activities/activities-data-model) to understand how <code class="expression">space.vars.activities</code> are represented structurally in <code class="expression">space.vars.Kizen\_company\_name</code>, including:

* The core <code class="expression">space.vars.activity</code> fields and field types
* How <code class="expression">space.vars.activity</code> <code class="expression">space.vars.objects</code> define schemas and associations
* How <code class="expression">space.vars.activities</code> relate to <code class="expression">space.vars.contacts</code> and other <code class="expression">space.vars.entities</code>
* How <code class="expression">space.vars.activity</code> data is stored and referenced across the platform

Understanding the data model is essential before working with <code class="expression">space.vars.activity</code> permissions, APIs, <code class="expression">space.vars.automations</code>, or integrations.

<details>

<summary>Related Topics</summary>

* [Activities](/docs/concepts/activities)
* [Activities Data Model](/docs/concepts/activities/activities-data-model)
* [Activity Permissions](/docs/concepts/activities/activity-permissions)
* [Advanced Activity Rules](/docs/concepts/activities/advanced-activity-rules)
* [Activities API & Webhooks](/docs/concepts/activities/activities-api-and-webhooks)

</details>


# Activities Data Model

Understand the Activities data model, including core fields, associations, and how Activity data is structured and used across the platform.

{% hint style="success" %}
**Audience**: Technical Builders, Implementors, and Developers

**Purpose:**  Explains the Activity data model in order to build integrations, <code class="expression">space.vars.automations</code>, and workflows that depend on Activity data.
{% endhint %}

## Overview

<code class="expression">space.vars.activities</code> represent work that has happened as Logged <code class="expression">space.vars.activities</code> or work that needs to happen as Scheduled <code class="expression">space.vars.activities</code>. <code class="expression">space.vars.activities</code> can be linked to <code class="expression">space.vars.contacts</code> or <code class="expression">space.vars.objects</code>, appear on <code class="expression">space.vars.timelines</code>, and trigger or be triggered by <code class="expression">space.vars.automations</code>.

This page defines the <code class="expression">space.vars.activities</code> data model in <code class="expression">space.vars.Kizen\_company\_name</code>, including the schemas, fields, and relationships used for scheduling and automating <code class="expression">space.vars.activities</code>.

Use this page when building:

* Integrations that read or write <code class="expression">space.vars.activity</code> data
* <code class="expression">space.vars.automations</code> that schedule <code class="expression">space.vars.activities</code>
* Business processes that link <code class="expression">space.vars.activities</code> to <code class="expression">space.vars.contacts</code> or <code class="expression">space.vars.objects</code>

The material on this page builds on information covered on the [Activities Core Concepts](/docs/concepts/activities/activities-core-concepts) page.

### How Activities Are Identified

Each <code class="expression">space.vars.activity</code> <code class="expression">space.vars.object</code> or <code class="expression">space.vars.activity</code> has a unique ID, which is unique within a business. These unique IDs are never reused.

#### Activity Lifecycle

The <code class="expression">space.vars.activity</code> lifecycle governs how <code class="expression">space.vars.activities</code> transition through planned and completed states. Unlike Record lifecycle events, <code class="expression">space.vars.activity</code> state is derived from timestamps and related records rather than explicit lifecycle enums.

* **Activity created → interaction defined**: Creating an <code class="expression">space.vars.activity</code> establishes a new interaction <code class="expression">space.vars.entity</code>. When a `due_datetime` is provided, the <code class="expression">space.vars.activity</code> appears as an upcoming task in the UI.
* **Activity completed and logged → state resolved**: A Scheduled <code class="expression">space.vars.activity</code> remains in a scheduled state until it is logged. Logging the <code class="expression">space.vars.activity</code> records completion metadata such as `completed_at` and creates a corresponding Logged <code class="expression">space.vars.activity</code> linked through `logged_activity_id`.

<code class="expression">space.vars.activity</code> state is determined by system fields including `due_datetime`, `completed_at`, `logged_activity_id`, and `notification`. The platform does not expose lifecycle enums such as “scheduled” or “completed.”

***

## Data Structure

The <code class="expression">space.vars.activity</code> Model encompasses three core elements: <code class="expression">space.vars.activity</code> <code class="expression">space.vars.objects</code>, Scheduled <code class="expression">space.vars.activities</code>, and Logged <code class="expression">space.vars.activities</code>.

The following diagram illustrates the lifecycle and structural relationships between these components:

1. An <code class="expression">space.vars.activity</code> <code class="expression">space.vars.object</code> defines the schema for a specific <code class="expression">space.vars.activity</code> type.&#x20;
2. When work is planned, a Scheduled <code class="expression">space.vars.activity</code> is created to track work that has not yet occurred.&#x20;
3. When work is completed, or when an <code class="expression">space.vars.activity</code> is logged directly, a Logged <code class="expression">space.vars.activity</code> is created to capture the details of the engagement.

<div data-with-frame="true"><figure><picture><source srcset="/files/KZ6ScPHZQfg7VZtuJhfX" media="(prefers-color-scheme: dark)"><img src="/files/GcPvXFpAY6mLNJUOvtaq" alt=""></picture><figcaption></figcaption></figure></div>

## Activity Field Types

<code class="expression">space.vars.activities</code> in <code class="expression">space.vars.Kizen\_company\_name</code> support three distinct categories of **(`fields[]`)** that behave differently at runtime depending on their type:

1. System Fields: System-defined, non-modifiable fields that are included with every <code class="expression">space.vars.activity</code>.
2. <code class="expression">space.vars.activity</code> Fields: Fields tracked on the <code class="expression">space.vars.activity</code> itself. These fields are stored when an <code class="expression">space.vars.activity</code> is logged and do not update fields on associated <code class="expression">space.vars.entities</code>.
3. <code class="expression">space.vars.fields</code>: Fields that belong to an associated <code class="expression">space.vars.entity</code> on an <code class="expression">space.vars.object</code>. These fields are updated as part of <code class="expression">space.vars.activity</code> completion and apply only to logged <code class="expression">space.vars.activities</code>.

Understanding the difference between these field types is critical when designing <code class="expression">space.vars.activity</code> schemas, configuring required fields, and building workflows that update related <code class="expression">space.vars.entities</code>.

### System Fields

<div data-with-frame="true"><figure><img src="/files/B743np8FQbhJDaCtmG8k" alt="" width="563"><figcaption></figcaption></figure></div>

System fields are platform-defined fields that belong to the <code class="expression">space.vars.activity</code> itself. They are intrinsic to the <code class="expression">space.vars.activity</code> <code class="expression">space.vars.entity</code> and are included with every <code class="expression">space.vars.activity</code>.

Examples include:

* <code class="expression">space.vars.activity</code> name
* Description and Visibility
* Completion timestamps
* Built-in <code class="expression">space.vars.activity</code> attributes

System fields:

* Always belong to the <code class="expression">space.vars.activity</code> <code class="expression">space.vars.entity</code>
* Are stored directly on the <code class="expression">space.vars.activity</code> <code class="expression">space.vars.entity</code>
* Cannot be modified by or repurposed
* Do not update fields on associated <code class="expression">space.vars.entities</code> when an <code class="expression">space.vars.activity</code> is completed

### Activity Fields

<div data-with-frame="true"><figure><picture><source srcset="/files/W4xpmJv8YYzQ2oRFwX8f" media="(prefers-color-scheme: dark)"><img src="/files/YAkBUhnFKbWq0TsjwPMs" alt=""></picture><figcaption></figcaption></figure></div>

<code class="expression">space.vars.activity</code> fields are fields defined on the <code class="expression">space.vars.activity</code> object itself that capture information specific to a logged <code class="expression">space.vars.activity</code>. These fields extend the <code class="expression">space.vars.activity</code> schema beyond system-defined attributes.

**Examples include:**

* Outcome or result values
* <code class="expression">space.vars.activity</code>-specific notes or classifications
* Custom values captured at the time the <code class="expression">space.vars.activity</code> is logged

**Activity fields:**

* Belong to Scheduled or Logged <code class="expression">space.vars.activity</code> <code class="expression">space.vars.entities</code>
* Are stored directly on the Logged <code class="expression">space.vars.activity</code>
* Are captured when an <code class="expression">space.vars.activity</code> is logged
* Do **not** update fields on associated <code class="expression">space.vars.entities</code> when the <code class="expression">space.vars.activity</code> is completed

<code class="expression">space.vars.activity</code> fields are used to describe what happened during the <code class="expression">space.vars.activity</code>, not to modify related <code class="expression">space.vars.entities</code>.

### Activity Custom Fields

<div data-with-frame="true"><figure><img src="/files/yikwqROkNCIEs59GcRUI" alt="" width="563"><figcaption></figcaption></figure></div>

Associated <code class="expression">space.vars.fields</code> are fields that belong to a related <code class="expression">space.vars.object</code> (such as a <code class="expression">space.vars.contact</code> or other  <code class="expression">space.vars.object</code>) and are updated only when the <code class="expression">space.vars.activity</code> is logged with a specific associated <code class="expression">space.vars.entity</code> selected.&#x20;

These fields are included in the <code class="expression">space.vars.activity</code> experience, but their definitions come from the associated <code class="expression">space.vars.entity</code> schema. When the <code class="expression">space.vars.activity</code> is completed, the values update the associated <code class="expression">space.vars.entity</code> rather than the <code class="expression">space.vars.activity</code>.

**Key characteristics:**

* Defined on the associated <code class="expression">space.vars.entity</code> and surface on the <code class="expression">space.vars.activity</code> only when a related <code class="expression">space.vars.entity</code> is selected
* Use the field types supported by the associated <code class="expression">space.vars.object</code>
* Required only when a related <code class="expression">space.vars.entity</code> is selected
* Updated on both the <code class="expression">space.vars.activity</code> and <code class="expression">space.vars.entity</code> when the <code class="expression">space.vars.activity</code> is completed and logged
* Do not apply if no associated <code class="expression">space.vars.entity</code> is present

Associated <code class="expression">space.vars.entity</code> fields allow <code class="expression">space.vars.activities</code> to drive updates to related <code class="expression">space.vars.entities</code> while keeping <code class="expression">space.vars.activity</code> data and <code class="expression">space.vars.entity</code> data clearly separated.

### **(`fields[]`) P**arameters

<table><thead><tr><th width="170.98046875">Field</th><th width="106.171875">Type</th><th width="109.58203125">Required</th><th>Description</th></tr></thead><tbody><tr><td><code>id</code></td><td>UUID</td><td>Yes</td><td>Field definition ID</td></tr><tr><td><code>name</code></td><td>String</td><td>Yes</td><td>Canonical name</td></tr><tr><td><code>display_name</code></td><td>String</td><td>Yes</td><td>User-facing label</td></tr><tr><td><code>field_type</code></td><td>String</td><td>Yes</td><td>Base type</td></tr><tr><td><code>custom_field_type</code></td><td>String</td><td>Yes</td><td>Subtype</td></tr><tr><td><code>value</code></td><td>Object</td><td>No</td><td>Stored value</td></tr></tbody></table>

***

## **Record Associations**

<code class="expression">space.vars.activities</code> can be associated with <code class="expression">space.vars.contacts</code> or <code class="expression">space.vars.objects</code> through relationship fields. These associations define the <code class="expression">space.vars.entities</code> an <code class="expression">space.vars.activity</code> may reference.

The configured associations also determine which <code class="expression">space.vars.fields</code> can appear on the <code class="expression">space.vars.activity</code>. Only fields from the associated <code class="expression">space.vars.contact</code> or <code class="expression">space.vars.object</code> types are available.

When an <code class="expression">space.vars.activity</code> is completed, values entered into <code class="expression">space.vars.fields</code> will update the specific associated records referenced by the <code class="expression">space.vars.activity</code>.

Because <code class="expression">space.vars.activities</code> may update associated <code class="expression">space.vars.entities</code>, this behavior introduces additional validation and permission considerations.

### **(`associated_entities[]`) P**arameters

<table><thead><tr><th width="188.890625">Field</th><th width="88.6171875">Type</th><th width="111.8671875">Required</th><th>Description</th></tr></thead><tbody><tr><td><code>custom_object_id</code></td><td>UUID</td><td>Yes</td><td><code class="expression">space.vars.object</code> type for which the record belongs</td></tr><tr><td><code>entity_id</code></td><td>UUID</td><td>Yes</td><td>ID of the linked <code class="expression">space.vars.entity</code></td></tr><tr><td><code>object_name</code></td><td>String</td><td>Yes</td><td><code class="expression">space.vars.object</code> display name</td></tr><tr><td><code>display_name</code></td><td>String</td><td>Yes</td><td><code class="expression">space.vars.entity</code> display name</td></tr><tr><td><code>object_api_name</code></td><td>String</td><td>Yes</td><td>Canonical API name</td></tr></tbody></table>

### Activity Custom Field Population Behavior

When an associated <code class="expression">space.vars.entity</code> is selected for an <code class="expression">space.vars.activity</code>:

* Existing values from the associated <code class="expression">space.vars.entity</code> are pre-filled into the corresponding <code class="expression">space.vars.activity</code> <code class="expression">space.vars.fields</code>.
* This pre-fill occurs for Logged <code class="expression">space.vars.activities</code> with pre-selected associated <code class="expression">space.vars.entities</code>.
* Pre-filled values bypass permissions only for existing values.

For more information on permissions, see [Activity Permissions](/docs/concepts/activities/activity-permissions).

### Required Field Rules

All required fields behavior depends on the type of field you are creating or modifying and whether there is an associated <code class="expression">space.vars.entity</code> selected for it.

#### Activity Custom Field Options

When creating an <code class="expression">space.vars.activity</code> custom field, <code class="expression">space.vars.Kizen\_company\_name</code> gives you two option toggles on the fields.

* If "Field is Required" is toggled on, the field will always be required and this cannot be modified later. This applies even if no related entity is selected.
* If "Informational Field (Readonly)" is toggled on, the <code class="expression">space.vars.activity</code> <code class="expression">space.vars.field</code> will be set to a read-only status.

#### Activity Custom Field Advanced Rules

Sets the visibility permissions on the <code class="expression">space.vars.fields</code> themselves with <code class="expression">space.vars.activity</code>. See: [Advanced Activity Rules](/docs/concepts/activities/advanced-activity-rules).

#### Required Associated Record Fields

When an <code class="expression">space.vars.activity</code> is associated with another <code class="expression">space.vars.entity</code>, any required fields on the associated <code class="expression">space.vars.entity</code> also become required for the <code class="expression">space.vars.activity</code>.

For example, if an <code class="expression">space.vars.activity</code> is associated with a Deal, the required Deal fields such as Owner or Stage will also be required and must be provided.

These fields are required only when a related <code class="expression">space.vars.entity</code> is selected. If no related <code class="expression">space.vars.entity</code> is associated, these fields are not required to submit the <code class="expression">space.vars.activity</code>.

**System Fields on Associated Records**

When configuring custom <code class="expression">space.vars.activity</code> fields from an associated <code class="expression">space.vars.object</code>, the <code class="expression">space.vars.object</code>'s **Display Name** field is not selectable and cannot be added as an <code class="expression">space.vars.activity</code> field. If a **Display Name** value is included in a Log <code class="expression">space.vars.activity</code> or Complete Scheduled <code class="expression">space.vars.activity</code> payload for any reason, the platform will automatically ignore it and no validation error will be raised.

This applies to both the Log <code class="expression">space.vars.activity</code> and Complete Scheduled <code class="expression">space.vars.activity</code> flows.

### Clearing Values

Users must be able to clear values from <code class="expression">space.vars.activity</code> <code class="expression">space.vars.fields</code> during <code class="expression">space.vars.activity</code> submission, even when those fields were pre-filled from a related <code class="expression">space.vars.entity</code>. Clearing a value explicitly indicates intent and should be treated as a valid submission action.

This also applies to the **Display Name** field on associated <code class="expression">space.vars.objects</code>. Display Name isn't a selectable <code class="expression">space.vars.activity</code> field, so if it shows up in the payload, there's no need to clear it before submitting. Display Name is never recorded on the logged <code class="expression">space.vars.activity</code>.&#x20;

{% hint style="warning" %}
**Caution**: If you see Display Name appear as an <code class="expression">space.vars.activity</code> field, it's either an invalid field added by AI or an <code class="expression">space.vars.object</code> that was misconfigured by AI.
{% endhint %}

***

## Schemas

### Activity Object Schema

<code class="expression">space.vars.activity</code> <code class="expression">space.vars.objects</code> define the type and configuration of <code class="expression">space.vars.activities</code>. All Scheduled and Logged <code class="expression">space.vars.activities</code> reference an <code class="expression">space.vars.activities</code> <code class="expression">space.vars.object</code>.

## The \_ActivityObject object

```json
{"openapi":"3.0.3","info":{"title":"Kizen API","version":"1.0.0"},"components":{"schemas":{"_ActivityObject":{"type":"object","properties":{"id":{"type":"string","format":"uuid"},"name":{"type":"string"},"api_name":{"type":"string"},"association_mode":{"type":"string"}},"required":["api_name","association_mode","id","name"]}}}}
```

### Scheduled Activity Schema

Scheduled <code class="expression">space.vars.activities</code> represent future tasks and can have an assignee and associations, but no field values.

## The ScheduledActivityV2WriteRequest object

```json
{"openapi":"3.0.3","info":{"title":"Kizen API","version":"1.0.0"},"components":{"schemas":{"ScheduledActivityV2WriteRequest":{"type":"object","properties":{"activity_object_id":{"type":"string","format":"uuid"},"activity_object_name":{"type":"string","nullable":true,"minLength":1},"due_datetime":{"type":"string","format":"date-time"},"original_due_datetime":{"type":"string","format":"date-time"},"employee_id":{"type":"string","format":"uuid","nullable":true},"role_id":{"type":"string","format":"uuid","nullable":true},"note":{"type":"string"},"mentions":{"type":"array","items":{"type":"string","format":"uuid","nullable":true}},"notifications":{"type":"array","items":{"$ref":"#/components/schemas/_ScheduledActivityNotificationV2WriteRequest"}},"associated_entities":{"type":"array","items":{"$ref":"#/components/schemas/_AssociatedEntityWriteRequest"},"nullable":true},"notify_mentioned":{"type":"boolean","default":false}}},"_ScheduledActivityNotificationV2WriteRequest":{"type":"object","properties":{"type":{"$ref":"#/components/schemas/NotificationTypeEnum"},"time_amount":{"type":"integer","maximum":2147483647,"minimum":1},"time_unit":{"$ref":"#/components/schemas/DelayTimeUnitEnum"}},"required":["time_amount","time_unit","type"]},"NotificationTypeEnum":{"enum":["email","text"],"type":"string","description":"* `email` - email\n* `text` - text"},"DelayTimeUnitEnum":{"enum":["minute","hour","day"],"type":"string","description":"* `minute` - minute\n* `hour` - hour\n* `day` - day"},"_AssociatedEntityWriteRequest":{"type":"object","properties":{"custom_object_id":{"type":"string","format":"uuid","nullable":true,"description":"This field is deprecated, use custom_object instead.","deprecated":true},"entity_id":{"type":"string","format":"uuid","nullable":true,"description":"This field is deprecated, use entity instead.","deprecated":true},"custom_object":{"allOf":[{"$ref":"#/components/schemas/_CustomObjectRequest"}],"nullable":true},"entity":{"allOf":[{"$ref":"#/components/schemas/EntityRequest"}],"nullable":true}}},"_CustomObjectRequest":{"type":"object","description":"A serializer that accepts either an 'id' field or an alternate identifier field.\n\nThis serializer class automatically detects which identifier field is being used and\nperforms validation to ensure at least one identifier is provided. It also provides\nutility methods for retrieving objects by their identifiers.\n\nAttributes:\n    IDENTIFIER_FIELD (str): The name of the alternate identifier field. Should be\n        defined in subclasses.\n\nMethods:\n    get_identifier_field(): Determines the alternate identifier field name.\n    validate(attrs): Ensures either 'id' or the alternate identifier is provided.\n    get_identifier_values(data, values_map, queryset): Retrieves objects by their identifiers.","properties":{"id":{"type":"string","format":"uuid","nullable":true,"description":"Required if \"name\" is not provided."},"name":{"type":"string","nullable":true,"minLength":1,"description":"Required if \"id\" is not provided."}}},"EntityRequest":{"type":"object","description":"A serializer that accepts either an 'id' field or an alternate identifier field.\n\nThis serializer class automatically detects which identifier field is being used and\nperforms validation to ensure at least one identifier is provided. It also provides\nutility methods for retrieving objects by their identifiers.\n\nAttributes:\n    IDENTIFIER_FIELD (str): The name of the alternate identifier field. Should be\n        defined in subclasses.\n\nMethods:\n    get_identifier_field(): Determines the alternate identifier field name.\n    validate(attrs): Ensures either 'id' or the alternate identifier is provided.\n    get_identifier_values(data, values_map, queryset): Retrieves objects by their identifiers.","properties":{"id":{"type":"string","format":"uuid","nullable":true,"description":"Required if \"name\" is not provided."},"name":{"type":"string","nullable":true,"minLength":1,"description":"Name of entity or email of contact."}}}}}}
```

## The ScheduledActivityV2Read object

```json
{"openapi":"3.0.3","info":{"title":"Kizen API","version":"1.0.0"},"components":{"schemas":{"ScheduledActivityV2Read":{"type":"object","properties":{"associated_entities":{"type":"array","items":{"$ref":"#/components/schemas/_AssociatedEntityRead"}},"id":{"type":"string","format":"uuid"},"note":{"type":"string"},"due_datetime":{"type":"string","format":"date-time"},"original_due_datetime":{"type":"string","format":"date-time"},"completed_at":{"type":"string","format":"date-time"},"logged_activity_id":{"type":"string","format":"uuid"},"activity_object":{"type":"string"},"employee":{"type":"string"},"role":{"$ref":"#/components/schemas/SimpleRole"},"mentions":{"$ref":"#/components/schemas/EmployeeSerpy"},"associated_fields":{"type":"string"},"notifications":{"type":"string"},"created":{"type":"string","format":"date-time"},"access":{"$ref":"#/components/schemas/AccessSerpy"}},"required":["access","activity_object","associated_entities","associated_fields","completed_at","created","due_datetime","employee","id","logged_activity_id","mentions","note","notifications","original_due_datetime","role"]},"_AssociatedEntityRead":{"type":"object","properties":{"custom_object":{"$ref":"#/components/schemas/_CustomObjectRead"},"entity":{"$ref":"#/components/schemas/_EntityRead"},"custom_object_id":{"type":"string","format":"uuid","deprecated":true},"object_name":{"type":"string","deprecated":true},"object_api_name":{"type":"string","deprecated":true},"entity_id":{"type":"string","format":"uuid","deprecated":true},"name":{"type":"string","readOnly":true,"deprecated":true},"display_name":{"type":"string","readOnly":true,"deprecated":true}},"required":["custom_object","custom_object_id","display_name","entity","entity_id","name","object_api_name","object_name"]},"_CustomObjectRead":{"type":"object","properties":{"id":{"type":"string","format":"uuid"},"name":{"type":"string"},"object_name":{"type":"string"}},"required":["id","name","object_name"]},"_EntityRead":{"type":"object","properties":{"id":{"type":"string","format":"uuid"},"name":{"type":"string"},"email":{"type":"string","readOnly":true},"display_name":{"type":"string","readOnly":true}},"required":["display_name","email","id","name"]},"SimpleRole":{"type":"object","properties":{"id":{"type":"string","format":"uuid","readOnly":true},"name":{"type":"string","maxLength":200},"default_for_new_users":{"type":"boolean"}},"required":["id","name"]},"EmployeeSerpy":{"type":"object","properties":{"picture_url":{"type":"string"},"id":{"type":"string","format":"uuid"},"first_name":{"type":"string"},"last_name":{"type":"string"},"email":{"type":"string","format":"email"},"display_name":{"type":"string"},"account_type":{"type":"string"}},"required":["account_type","display_name","email","first_name","id","last_name","picture_url"]},"AccessSerpy":{"type":"object","properties":{"view":{"type":"boolean"},"edit":{"type":"boolean"},"remove":{"type":"boolean"}},"required":["edit","remove","view"]}}}}
```

### Logged Activity Schema

Logged <code class="expression">space.vars.activities</code> represent past tasks and can have assignee and associations. While you cannot log an <code class="expression">space.vars.activity</code> via API, you can view logged <code class="expression">space.vars.entities</code> by ID.

## The LogActivityRead object

```json
{"openapi":"3.0.3","info":{"title":"Kizen API","version":"1.0.0"},"components":{"schemas":{"LogActivityRead":{"type":"object","properties":{"fields":{"type":"array","items":{"$ref":"#/components/schemas/LoggedActivityRecordField"}},"id":{"type":"string","format":"uuid"},"notes":{"type":"string"},"activity_object":{"allOf":[{"$ref":"#/components/schemas/_ActivityObject"}],"readOnly":true},"associated_entities":{"type":"array","items":{"$ref":"#/components/schemas/AssociatedEntity"},"readOnly":true},"logged_at":{"type":"string","format":"date-time"},"logged_by":{"$ref":"#/components/schemas/EmbedEmployee"},"completed_at":{"type":"string","format":"date-time","nullable":true,"readOnly":true},"completed_by":{"allOf":[{"$ref":"#/components/schemas/SerializerMeta"}],"readOnly":true},"scheduled_activity_id":{"type":"string","format":"uuid","nullable":true,"readOnly":true},"mentions":{"type":"array","items":{"type":"string","format":"uuid"},"readOnly":true}},"required":["activity_object","associated_entities","completed_at","completed_by","id","logged_at","logged_by","mentions","notes","scheduled_activity_id"]},"LoggedActivityRecordField":{"type":"object","properties":{"value":{"nullable":true},"id":{"type":"string","format":"uuid"},"field_type":{"type":"string","readOnly":true},"custom_field_type":{"type":"string","nullable":true,"readOnly":true},"name":{"type":"string","readOnly":true},"display_name":{"type":"string","readOnly":true}},"required":["custom_field_type","display_name","field_type","id","name"]},"_ActivityObject":{"type":"object","properties":{"id":{"type":"string","format":"uuid"},"name":{"type":"string"},"api_name":{"type":"string"},"association_mode":{"type":"string"}},"required":["api_name","association_mode","id","name"]},"AssociatedEntity":{"type":"object","properties":{"custom_object_id":{"type":"string","format":"uuid"},"object_name":{"type":"string"},"entity_id":{"type":"string","format":"uuid"},"name":{"type":"string"},"display_name":{"type":"string"},"custom_object_name":{"type":"string"},"object_api_name":{"type":"string"}},"required":["custom_object_id","custom_object_name","display_name","entity_id","name","object_api_name","object_name"]},"EmbedEmployee":{"type":"object","properties":{"id":{"type":"string","format":"uuid"},"name":{"type":"string"},"full_name":{"type":"string"},"display_name":{"type":"string"},"email":{"type":"string","format":"email"},"deleted":{"type":"boolean"}},"required":["deleted","display_name","email","full_name","id","name"]},"SerializerMeta":{"type":"object","properties":{"picture_url":{"type":"string"},"id":{"type":"string","format":"uuid"},"first_name":{"type":"string"},"last_name":{"type":"string"},"email":{"type":"string","format":"email"},"display_name":{"type":"string"},"account_type":{"type":"string"}},"required":["account_type","display_name","email","first_name","id","last_name","picture_url"]}}}}
```

***

## Timeline Representation

<code class="expression">space.vars.activities</code> appear on <code class="expression">space.vars.timelines</code> based on associations and timestamps.

### When Activities Appear

An <code class="expression">space.vars.activity</code> appears on a <code class="expression">space.vars.timelines</code> when it includes the record in `associated_entities[]`. If an <code class="expression">space.vars.activity</code> is associated to multiple <code class="expression">space.vars.entities</code>, it appears on each associated record's <code class="expression">space.vars.timeline</code>.

### Lifecycle Impact

Completing a Scheduled <code class="expression">space.vars.activity</code> creates a Logged <code class="expression">space.vars.activity</code>, which appears on the <code class="expression">space.vars.timeline</code> at the appropriate chronological position.

If an association is removed or a <code class="expression">space.vars.entity</code> is archived, the <code class="expression">space.vars.activity</code> no longer appears on that <code class="expression">space.vars.timeline</code>.

***

## Additional Information

<details>

<summary>Supported Activity APIs</summary>

Activities can be accessed programmatically to:

* [Schedule Activities](/docs/concepts/activities/activities-api-and-webhooks/schedule-activities-api)&#x20;
* [View Logged Activity details](/docs/concepts/activities/activities-api-and-webhooks/view-logged-activity-details-api)
* [List Scheduled Activities](/docs/concepts/activities/activities-api-and-webhooks/list-scheduled-activities-api)
* [Retrieve Scheduled Activities by ID](/docs/concepts/activities/activities-api-and-webhooks/retrieve-scheduled-activity-details-by-id-api)

API operations require valid authentication and business context.&#x20;

{% hint style="info" %}
**Note**: We highly discourage logging, creating, or updating Activities via API as it is easy to accidentally overwrite existing values when data is passed incorrectly or partially.
{% endhint %}

</details>

<details>

<summary>Error States</summary>

Errors may occur due to:

* Validation failures
* Missing required associations
* [Activity Permission restrictions](/docs/concepts/activities/activity-permissions)
* Automation execution failures

API responses include error details describing the failure condition.

</details>

***

## What's Next?

Next, continue to [Activity Permissions](/docs/concepts/activities/activity-permissions) to understand how access to <code class="expression">space.vars.activities</code> is controlled, including:

* Who can create, view, and modify <code class="expression">space.vars.activities</code>
* How permissions interact with <code class="expression">space.vars.activity</code> <code class="expression">space.vars.objects</code> and associated <code class="expression">space.vars.entities</code>
* How access rules are enforced consistently across the UI, APIs, and <code class="expression">space.vars.automations</code>

Understanding permissions is essential before exposing <code class="expression">space.vars.activity</code> data through integrations or enabling <code class="expression">space.vars.automation</code> workflows.

<details>

<summary>Related Topics</summary>

* [Activities](/docs/concepts/activities)
* [Activities Core Concepts](/docs/concepts/activities/activities-core-concepts)
* [Activity Permissions](/docs/concepts/activities/activity-permissions)
* [Advanced Activity Rules](/docs/concepts/activities/advanced-activity-rules)
* [Activities API & Webhooks](/docs/concepts/activities/activities-api-and-webhooks)

</details>


# Activity Permissions

Understand how Activity permissions control access to creating, viewing, and managing Activities across users, roles, and APIs.

{% hint style="success" %}
**Audience:** Admins, Technical Builders, Implementors, and Developers

**Purpose:** Explains how permissions and sharing settings interact for <code class="expression">space.vars.activities</code> in <code class="expression">space.vars.Kizen\_company\_name</code> so you can configure <code class="expression">space.vars.activity</code> types, roles, and workflows.
{% endhint %}

## Overview

<code class="expression">space.vars.activity</code> permissions differ from standard <code class="expression">space.vars.object</code> permissions in several important ways. Understanding these differences is critical when designing activity schemas, configuring sharing rules, and troubleshooting visibility or edit issues.

<code class="expression">space.vars.activity</code> permissions are determined by:

* <code class="expression">space.vars.activity</code> permissions (Role or User permission group settings such as My vs All, View, Log, Create, Edit, Delete)
* Sharing settings on the <code class="expression">space.vars.activity</code> type
* Assignment (user or role)
* <code class="expression">space.vars.object</code>, <code class="expression">space.vars.entity</code>, and section permissions for related entities

No single setting controls access in isolation. In this topic, we will cover <code class="expression">space.vars.activities</code> permissions.

### Permission Rules

The following rules apply across all scenarios unless otherwise stated:

1. If an <code class="expression">space.vars.activity</code> is assigned to a user or one of their roles, the user can always log it.
2. If a user can see a Scheduled <code class="expression">space.vars.activity</code> and has Edit permission for it, they can assign it to themselves and log it.
3. “My” permissions are never more restrictive than “All” permissions.
4. Sharing settings can only further restrict access granted by a user’s permission group; they cannot expand or grant additional access.
5. If scheduling is fully denied by permissions, scheduling actions do not appear in the UI.

***

## Scheduled Activity Visibility

Visibility for Scheduled <code class="expression">space.vars.activities</code> depends on assignment, permissions, sharing settings, and whether the Scheduled <code class="expression">space.vars.activities</code> section is enabled.

{% columns %}
{% column %}

#### Assigned <code class="expression">space.vars.activities</code>

Users can always:

* See Scheduled <code class="expression">space.vars.activities</code> assigned to themselves,
* See Scheduled <code class="expression">space.vars.activities</code> assigned to any of their roles,
* Log those <code class="expression">space.vars.activities</code>, regardless of sharing settings.

This behavior intentionally overrides standard visibility restrictions to ensure assigned work is always accessible.
{% endcolumn %}

{% column %}

#### Non-assigned <code class="expression">space.vars.activities</code>

Visibility for Scheduled <code class="expression">space.vars.activities</code> assigned to other users depends on both permissions and sharing settings:

To see and complete Scheduled <code class="expression">space.vars.activities</code> assigned to others, a user must have at least **View/Log** permissions set to **All** for <code class="expression">space.vars.activities</code>.

In addition, visibility is affected by:

* Scheduled <code class="expression">space.vars.activity</code> permission scope (My vs All),
* Sharing settings on the <code class="expression">space.vars.activity</code> type.

If either the <code class="expression">space.vars.activity</code> permission scope or the sharing settings restrict access, the Scheduled <code class="expression">space.vars.activity</code> does not appear.
{% endcolumn %}
{% endcolumns %}

### Disabled Scheduled Activity Permissions

If the Scheduled <code class="expression">space.vars.activities</code> section is disabled entirely:

* No Scheduled <code class="expression">space.vars.activities</code> appear on <code class="expression">space.vars.entity</code> pages or <code class="expression">space.vars.dashboards</code>.
* This includes <code class="expression">space.vars.activities</code> assigned to the current user.

These rules explain why users may see only their own Scheduled <code class="expression">space.vars.activities</code>, or none at all, depending on how permissions and sections are configured.

***

## Scheduling Activities

Scheduling <code class="expression">space.vars.activities</code> is intentionally more restrictive than logging to ensure users cannot create or assign work beyond their permissions.

### General Scheduling Requirements

To schedule an <code class="expression">space.vars.activity</code>, both of the following must be true:

* The user’s permissions allow scheduling <code class="expression">space.vars.activities</code>.
* The <code class="expression">space.vars.activity</code> type’s sharing settings allow scheduling.

If either condition is not met, scheduling options do not appear in the UI.

{% columns %}
{% column %}

### Scheduling <code class="expression">space.vars.activities</code> to Yourself

A user can schedule an <code class="expression">space.vars.activity</code> for themselves only when:

* They have **Create/Edit** permissions for Scheduled <code class="expression">space.vars.activities</code>
* The Activity’s sharing level is set to **Log/Schedule** or higher
  {% endcolumn %}

{% column %}

### Scheduling <code class="expression">space.vars.activities</code> to Others

Scheduling an Activity for another user or role is allowed only when:

* The user has **Create/Edit** permissions for All Scheduled <code class="expression">space.vars.activities</code>
* The <code class="expression">space.vars.activity</code>'s sharing settings allow scheduling
* The user has permission to assign <code class="expression">space.vars.activities</code> to **My Roles**.

If any of these conditions are not met, assignment options are hidden.
{% endcolumn %}
{% endcolumns %}

These rules explain why users may be able to log assigned work but not create or assign new Scheduled <code class="expression">space.vars.activities</code>.

***

## Logging Activities

Users can always log an <code class="expression">space.vars.activity</code> that has been assigned to them, regardless of permissions or sharing settings. This behavior is intentional so assigned work cannot be blocked from completion.

However, users can only create a new logged <code class="expression">space.vars.activity</code> from scratch if the <code class="expression">space.vars.activity</code> type is available to them. Whether an <code class="expression">space.vars.activity</code> type appears in the Log <code class="expression">space.vars.activity</code> dropdown depends on configuration. An <code class="expression">space.vars.activity</code> type is only available for manual logging when:

* The user has permission to edit that <code class="expression">space.vars.activity</code> type, and
* The <code class="expression">space.vars.activity</code>’s sharing settings allow logging

This is why a user may be able to log an assigned <code class="expression">space.vars.activity</code> but not see the same <code class="expression">space.vars.activity</code> type available for manual selection.

***

## Activity Assignment Rules

Assignment controls who is responsible for completing an <code class="expression">space.vars.activity</code> and is governed by visibility, scheduling permissions, and assignment rights.

{% columns %}
{% column %}

#### Assigning <code class="expression">space.vars.activities</code> to Yourself

A user can assign an <code class="expression">space.vars.activity</code> to themselves when:

* They can see the <code class="expression">space.vars.activity</code>, and
* They have permission to schedule <code class="expression">space.vars.activities</code>

If either condition is not met, the option to assign the <code class="expression">space.vars.activity</code> to themselves does not appear.
{% endcolumn %}

{% column %}

#### Assigning <code class="expression">space.vars.activities</code> to Roles

Assigning an <code class="expression">space.vars.activity</code> to a role is allowed when the user has the Assign to My Role(s) permission and the <code class="expression">space.vars.activity</code> is visible to them.

This permission acts as an override to broader <code class="expression">space.vars.activity</code> assignment permissions, which allows users with limited <code class="expression">space.vars.activity</code> permissions to::

* Assign an <code class="expression">space.vars.activity</code> from a role to themselves
* Reassign the <code class="expression">space.vars.activity</code> back to their role if needed

Users cannot assign the <code class="expression">space.vars.activity</code> to other roles unless they have the appropriate assignment permissions.&#x20;

Standard visibility rules still apply when assigning <code class="expression">space.vars.activities</code> to roles. If the user does not have the required assignment permissions, reassignment options are hidden from the UI.
{% endcolumn %}
{% endcolumns %}

These rules explain why users may be able to view or log an <code class="expression">space.vars.activity</code> but not change who it is assigned to.

***

## Activity Share Settings

Share Settings restrict access further after permission groups are applied. It cannot override missing permissions.

| Sharing Level | Effect                                                                                              |
| ------------- | --------------------------------------------------------------------------------------------------- |
| None          | <code class="expression">space.vars.activity</code> not visible unless assigned                     |
| Log/Schedule  | Allows logging and scheduling if permissions allow                                                  |
| Edit          | Allows editing Scheduled <code class="expression">space.vars.activities</code> if permissions allow |
| Admin/Delete  | Allows deletion only if permissions allow                                                           |

***

## Activity Custom Field Permissions

<code class="expression">space.vars.activities</code> intentionally bypass some standard permission patterns to ensure complete and consistent logging.

### Field-level Permissions

Field-level permissions on the <code class="expression">space.vars.object</code> fields that <code class="expression">space.vars.activities</code> mirror are not enforced when viewing or editing <code class="expression">space.vars.activities</code>. However, <code class="expression">space.vars.object</code>-level permissions are still respected.

This ensures:

* Required fields can always be completed
* <code class="expression">space.vars.activities</code> remain structurally complete
* Admin-defined schemas are respected

Users can:

* View all <code class="expression">space.vars.activity</code> <code class="expression">space.vars.fields</code> for associated <code class="expression">space.vars.objects</code>
* Edit all <code class="expression">space.vars.activity</code> <code class="expression">space.vars.fields</code> unless restricted by <code class="expression">space.vars.object</code>-level rules
* Mark <code class="expression">space.vars.activity</code> <code class="expression">space.vars.fields</code> as read-only so they can be populated once and remain immutable after a value is set.

***

## Object-level Permissions and Activities

<code class="expression">space.vars.object</code>-level permissions control whether users can select, change, or view <code class="expression">space.vars.entity</code> associations when scheduling or logging <code class="expression">space.vars.activities</code>.

### When Object Permissions are Disabled

If a user does not have access to an <code class="expression">space.vars.object</code>’s section:

* Association selectors are displayed as read-only
* Existing associations remain visible
* Tooltips explain why the selector cannot be changed

This ensures users can see existing configuration without expanding access.

{% columns %}
{% column %}

#### Scheduled <code class="expression">space.vars.activities</code>

If a Scheduled <code class="expression">space.vars.activity</code> was created by another user who has access to the related object:

* The existing association is visible but read-only
* Associated <code class="expression">space.vars.fields</code> are populated from the related <code class="expression">space.vars.entity</code>
* <code class="expression">space.vars.field</code> values remain editable

This allows users to complete or update <code class="expression">space.vars.activities</code> without changing protected associations.
{% endcolumn %}

{% column %}

#### Logged <code class="expression">space.vars.activities</code>

When logging an <code class="expression">space.vars.activity</code> and the related <code class="expression">space.vars.object</code> section is disabled:

* The association selector is empty and read-only
* No <code class="expression">space.vars.entities</code> can be selected or changed
* Associated <code class="expression">space.vars.fields</code> behave as standard <code class="expression">space.vars.activity</code> fields and remain editable
  {% endcolumn %}
  {% endcolumns %}

### No Association

If no related <code class="expression">space.vars.entity</code> was selected when the <code class="expression">space.vars.activity</code> was scheduled:

* The association selector is empty and is read-only, which cannot be changed
* Associated <code class="expression">space.vars.fields</code> are blank
* <code class="expression">space.vars.fields</code> behave as standard <code class="expression">space.vars.activity</code> fields and are editable

These rules preserve data integrity and visibility while allowing users to complete <code class="expression">space.vars.activities</code> even when they do not have access to the underlying <code class="expression">space.vars.entities</code>.

***

## Record-level Permissions

These rules ensure <code class="expression">space.vars.activities</code> remain flexible and complete while enforcing <code class="expression">space.vars.entity</code>-level access boundaries. Differences between Scheduled and Logged behavior based on when associations are preconfigured versus selected at submission time.

### Create/Edit on my Records

When a user has **Create/Edit** on My Associated <code class="expression">space.vars.entities</code> for an <code class="expression">space.vars.object</code> and the <code class="expression">space.vars.object</code>’s section is enabled:

* The association chooser is editable
* Users can create new related <code class="expression">space.vars.entities</code>
* Associated <code class="expression">space.vars.fields</code> are editable

This allows users to fully manage associations and related data during <code class="expression">space.vars.activity</code> submission.

### View-only Record Permissions

When a user has View on My Associated <code class="expression">space.vars.entities</code> only for an <code class="expression">space.vars.object</code> and the <code class="expression">space.vars.object</code>’s section is enabled, behavior differs depending on the <code class="expression">space.vars.activity</code> type.

{% columns %}
{% column %}

#### **Scheduled** <code class="expression">space.vars.activities</code>

* Pre-selected associations remain editable
* If the user changes the association, they cannot reselect the original <code class="expression">space.vars.entity</code> if it is not otherwise visible to them
* Associated <code class="expression">space.vars.fields</code> still pre-populate and remain editable
  {% endcolumn %}

{% column %}

#### **Logged** <code class="expression">space.vars.activities</code>

* Association options are limited to <code class="expression">space.vars.entities</code> the user can view
* Users cannot select or associate <code class="expression">space.vars.entities</code> outside their visibility
  {% endcolumn %}
  {% endcolumns %}

***

## A Word of Caution

{% hint style="warning" %}
**Caution:** Carefully review Activity field configurations and sharing settings, as misconfiguration may expose sensitive data or violate organizational data handling policies.
{% endhint %}

<code class="expression">space.vars.activity</code> permissions in <code class="expression">space.vars.Kizen\_company\_name</code> are intentionally permissive where logging and completion are concerned, while remaining strict about scheduling, assignment, and cross-<code class="expression">space.vars.entity</code> visibility.

Admins should carefully consider:

* Sharing levels
* Assignment patterns
* Object section permissions
* Required field configurations

Misalignment between these settings is the most common cause of unexpected <code class="expression">space.vars.activity</code> behavior.&#x20;

***

## What's Next?

Next, continue to [Advanced Activity Rules](/docs/concepts/activities/advanced-activity-rules), which explains how conditional logic can be applied to <code class="expression">space.vars.activities</code> to control field visibility and validation behavior. This section helps you understand:

* When <code class="expression">space.vars.activity</code> fields are shown based on rule conditions
* How required fields behave when hidden by rules
* How rules are evaluated and enforced across the platform

<details>

<summary>Related Topics</summary>

* [Activities](/docs/concepts/activities)
* [Activities Core Concepts](/docs/concepts/activities/activities-core-concepts)
* [Activities Data Model](/docs/concepts/activities/activities-data-model)
* [Advanced Activity Rules](/docs/concepts/activities/advanced-activity-rules)
* [Activities API & Webhooks](/docs/concepts/activities/activities-api-and-webhooks)

</details>


# Advanced Activity Rules

Learn how Advanced Activity Rules in Kizen use conditional logic to control Activity fields, validation, and submission behavior.

{% hint style="success" %}
**Audience:** Admins and Technical Builders, Implementors, and Developers

**Purpose:** Explains how Advanced <code class="expression">space.vars.activity</code> Rules work in <code class="expression">space.vars.Kizen\_company\_name</code> and how they affect <code class="expression">space.vars.activity</code> field visibility and validation across the platform.
{% endhint %}

## Overview

Advanced <code class="expression">space.vars.activity</code> Rules allow you to apply conditional logic that controls when <code class="expression">space.vars.activity</code> fields are shown and how validation behaves during submission. These rules are enforced both in the UI and on the backend, ensuring consistent behavior across UI manual entry and <code class="expression">space.vars.automations</code>.

### When to Use Advanced Activity Rules

Use Advanced <code class="expression">space.vars.activity</code> Rules when you need to:

* Show <code class="expression">space.vars.activity</code> fields only when relevant
* Apply conditional validation without creating multiple <code class="expression">space.vars.activity</code> Types
* Support multiple workflows within a single <code class="expression">space.vars.activity</code> Type
* Reduce form complexity while maintaining structured data capture

***

## Rule Components

Advanced <code class="expression">space.vars.activity</code> Rules are composed of the following elements.

| Rule Component                   | Description                                                                                                                                                                                                                                     |
| -------------------------------- | ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| **Trigger or Condition Fields**  | The field whose value determines when a rule applies. All Field types can be used as conditions.                                                                                                                                                |
| **Operators and Conditions**     | Each condition includes a comparison operator (for example, *equals* or *does not equal*) and a comparison value. Available operators depend on the selected field type.                                                                        |
| **Condition Logic**              | Defines how multiple conditions are evaluated. **ANY** applies the rule if any condition is met (logical OR). **ALL** applies the rule only if all conditions are met (logical AND). This setting applies to all conditions within the rule.    |
| **Target Fields (Shown Fields)** | Defines which <code class="expression">space.vars.activity</code> fields are shown when rule conditions are met. Any Activity field can be selected as a target. Fields not selected remain hidden. A field can only be controlled by one rule. |

### How Rules Are Evaluated

Advanced <code class="expression">space.vars.activity</code> Rules are evaluated:

* When the <code class="expression">space.vars.activity</code> form loads
* When a trigger field value changes
* When the <code class="expression">space.vars.activity</code> is submitted
* During backend validation (UI & <code class="expression">space.vars.automations</code>)

Each field can appear only once in the **Show the following field(s)** selector, so a field's visibility is controlled by a single rule. This prevents conflicts where one rule would show a field, and another would hide it, and means rule order does not affect which fields are displayed.

{% hint style="info" %}
**Note:** Required fields are not required if they are hidden from the user.
{% endhint %}

### Rule Effects, Behavior, and Limitations

Advanced <code class="expression">space.vars.activity</code> Rules affect <code class="expression">space.vars.activity</code> behavior in the following ways:

* Hidden required fields are ignored during validation
* Validation behavior is consistent across UI and backend submissions
* Rules do not modify stored values or historical <code class="expression">space.vars.activity</code> records

They have the following limitations:

* A field can only be controlled by one rule
* A field can be used as a trigger for multiple rules
* Rules control visibility and validation only
* Rules do not assign values, update records, or alter historical data

***

## Permissions and Advanced Rules

Advanced Rules control when fields are shown, not whether users can edit them.

* Rules are evaluated regardless of permissions, meaning the logic still runs even if the user cannot access certain fields.
* If a rule condition references a field the user cannot access, that field is treated as **blank** during evaluation.
* Permissions still control editability. If a field is read-only due to permissions, the user can see it (if shown by the rule) but cannot edit it.

{% hint style="warning" %}
**Caution:** If a required field becomes read-only due to permissions, the form cannot be submitted. This is a configuration issue and should be resolved by adjusting permissions or rule logic.
{% endhint %}

***

## Industry Examples

{% tabs %}
{% tab title="Insurance" %}
**Conditional Claim Follow-Up**\
Show additional fields such as Claim Denial Reason or Adjuster Notes only when a claim outcome is marked as Denied. This ensures required details are captured without cluttering the <code class="expression">space.vars.activity</code> form for approved claims.

**Escalation Tracking**\
Display Supervisor Review Required and Escalation Reason fields only when a claim exceeds a defined severity or dollar threshold.

**Policyholder Communication Paths**\
Show different <code class="expression">space.vars.activity</code> fields based on the communication method selected (Email, Phone, or In-Person), allowing agents to log channel-specific details accurately.
{% endtab %}

{% tab title="Healthcare" %}
**Appointment Outcome Documentation**\
Show No-Show Reason or Reschedule Date fields only when an appointment <code class="expression">space.vars.activity</code> is marked as Missed or Rescheduled, reducing unnecessary data entry for completed visits.

**Care Pathway Differentiation**\
Display different follow-up fields depending on whether an <code class="expression">space.vars.activity</code> relates to **Initial** Consultation, Treatment, or Post-Care Follow-Up.

**Compliance and Consent Capture**\
Require consent-related fields only when certain care types or procedures are selected, ensuring compliance without over-collecting information.
{% endtab %}

{% tab title="Financial Services" %}
**Transaction Review and Exception Handling**\
Show Exception Reason or Compliance Notes fields only when a transaction <code class="expression">space.vars.activity</code> is flagged for review, supporting audit requirements without slowing routine processing.

**Client Interaction Classification**\
Display different <code class="expression">space.vars.activity</code> fields based on interaction type, such as Advisory Call, Account Maintenance, or Issue Resolution, enabling consistent client records.

**Follow-Up Requirements**\
Require follow-up scheduling details only when an <code class="expression">space.vars.activity</code> outcome indicates further action is needed, such as additional documentation or client approval.
{% endtab %}
{% endtabs %}

***

## What’s Next

Next, continue to [Adding Advanced Activity Rules](/docs/concepts/activities/advanced-activity-rules/adding-advanced-activity-rules), which explains how to configure rules using the <code class="expression">space.vars.Kizen\_company\_name</code> UI so you can understand:

* How to define rule conditions and logic
* How to select fields to show when conditions are met
* How rule order and required fields affect <code class="expression">space.vars.activity</code> submission

Reviewing the UI configuration steps prepares you to design and test <code class="expression">space.vars.activity</code> Rules confidently before using them in production.

<details>

<summary>Related Topics</summary>

* [Activities](/docs/concepts/activities)
* [Activities Core Concepts](/docs/concepts/activities/activities-core-concepts)
* [Activities Data Model](/docs/concepts/activities/activities-data-model)
* [Activity Permissions](/docs/concepts/activities/activity-permissions)
* [Activities API & Webhooks](/docs/concepts/activities/activities-api-and-webhooks)

</details>


# Adding Advanced Activity Rules

Learn how to add Advanced Activity Rules in Kizen using the UI to configure conditional logic for Activity fields and validation behavior.

## **Overview**

{% hint style="warning" %}
**Caution:** This setup reflects Kizen's default configuration. Your administrator may have customized your layout, so columns or navigation may appear differently. Trial accounts may have limited features.
{% endhint %}

This walkthrough shows you how to add Advanced <code class="expression">space.vars.activity</code> Rules using the Kizen UI. You’ll learn how to define rule conditions, apply logic, and specify which <code class="expression">space.vars.activity</code> fields are shown when those conditions are met, so <code class="expression">space.vars.activities</code> behave consistently during logging and submission.

Advanced <code class="expression">space.vars.activity</code> Rules are configured at the <code class="expression">space.vars.activity</code> Type level and take effect immediately once saved.

## **Before You Begin**

Before adding Advanced <code class="expression">space.vars.activity</code> Rules, make sure the following are in place:

* You have Admin access to Activities
* The <code class="expression">space.vars.activity</code> Type includes:
  * One or more field types to use as rule conditions
  * The <code class="expression">space.vars.activity</code> fields you want to show when conditions are met
* You understand that:
  * Each field can be controlled by only one rule
  * Rules explicitly define which fields are shown
  * Required fields are ignored if they are hidden by a rule

Having the <code class="expression">space.vars.activity</code> fields configured first ensures they appear as selectable options when defining rules in the Advanced Rules tab. See [Activity Fields](/docs/concepts/activities/activities-data-model#activity-fields) for more information.

***

{% stepper %}
{% step %}

### Navigate to Advanced Rules

1. Go to **Platform > Activities**
2. Choose an <code class="expression">space.vars.activity</code>
3. Click on the Advanced Rules Tab

<div data-with-frame="true"><figure><img src="/files/G60vMkevJ7OosuXDB7gc" alt="" width="563"><figcaption></figcaption></figure></div>
{% endstep %}

{% step %}

### Create a Rule

* Click **+Add Activity Rule**
* Select a field from the **When the following conditions are met** dropdown

{% hint style="info" %}
**Note:** You can add multiple condition fields by selecting the **+Add Condition** button. When multiple conditions are present, the rule specifies whether any or all of them must be met.
{% endhint %}

<div data-with-frame="true"><figure><img src="/files/N26g6JTvqdxsGgKvjIjq" alt="" width="563"><figcaption></figcaption></figure></div>

* Select an Operator (If required). ANY allows you to define the condition by OR. ALL allows you to define the condition by AND.
* Select a field from the **Show the following field(s)** dropdown.
  {% endstep %}

{% step %}

### Save and Test

* Save the <code class="expression">space.vars.activity</code> configuration, then log or schedule a test <code class="expression">space.vars.activity</code> to verify
* When you verify, check the following:
  * Field visibility changes correctly
  * Required fields behave as expected
  * Submission succeeds in all valid scenarios
    {% endstep %}
    {% endstepper %}

***

## Design Guidance and Best Practices

* Keep your rules simple and predictable
* Avoid chaining rules that are hard to reason about
* Use Dropdown fields for clear branching logic
* Test rules with different permission levels
* Avoid making read-only fields required

***

## What's Next

Next, continue to [Activities APIs & Webhooks](/docs/concepts/activities/activities-api-and-webhooks), which provides an overview of all API endpoints and webhook events available for <code class="expression">space.vars.activities</code>. This section helps you understand:

* Which <code class="expression">space.vars.activity</code> operations are available via API
* How Scheduled and Logged <code class="expression">space.vars.activities</code> are exposed programmatically
* Which <code class="expression">space.vars.activity</code> lifecycle events emit webhook notifications

Reviewing the APIs and Webhooks overview prepares you to work with individual endpoints and event types in the sections that follow.

<details>

<summary>Related Topics</summary>

* [Activities](/docs/concepts/activities)
* [Activities Core Concepts](/docs/concepts/activities/activities-core-concepts)
* [Activities Data Model](/docs/concepts/activities/activities-data-model)
* [Activity Permissions](/docs/concepts/activities/activity-permissions)
* [Advanced Activity Rules](/docs/concepts/activities/advanced-activity-rules)
* [Activities API & Webhooks](/docs/concepts/activities/activities-api-and-webhooks)

</details>


# Activities API & Webhooks

Overview of Activities APIs and webhooks in Kizen, explaining how to schedule Activities, retrieve scheduled and logged Activity data, and trigger external workflows from Activity events.

## Overview

<code class="expression">space.vars.activities</code> can be managed programmatically through the <code class="expression">space.vars.Kizen\_company\_name</code> API and webhooks, enabling external systems and internal <code class="expression">space.vars.automations</code> to schedule, retrieve, and respond to <code class="expression">space.vars.activity</code> state changes in near real time.

Each subpage focuses on a specific use case, such as scheduling <code class="expression">space.vars.activities</code>, retrieving logged <code class="expression">space.vars.activity</code> details, or triggering external workflows when <code class="expression">space.vars.activities</code> are created or completed.

### How Activities Are Exposed Programmatically

<code class="expression">space.vars.activities</code> are available through APIs and webhooks in ways that align with their lifecycle:

* Scheduled <code class="expression">space.vars.activities</code> support planning and coordination use cases
* Logged <code class="expression">space.vars.activities</code> provide a durable record of completed interactions
* Lifecycle events emit webhook notifications that can drive downstream workflows

All API and webhook behavior respects <code class="expression">space.vars.activity</code> Objects, permissions, and record associations, ensuring consistent behavior across UI, <code class="expression">space.vars.automations</code>, and external integrations.

### When to Use APIs vs Webhooks

In general:

* Use APIs when you need to create or access <code class="expression">space.vars.activity</code> data on demand
* Use webhooks when you need to react automatically to <code class="expression">space.vars.activity</code> lifecycle events

Many integrations use both together, using APIs for data access and webhooks for event-driven workflows.

***

## API Topics in this Section

* [Scheduling Activities](/docs/concepts/activities/activities-api-and-webhooks/schedule-activities-api)
* [Viewing Logged Activity Details](/docs/concepts/activities/activities-api-and-webhooks/view-logged-activity-details-api)
* [Listing Scheduled Activities](/docs/concepts/activities/activities-api-and-webhooks/list-scheduled-activities-api)
* [Retrieving Scheduled Activity Details by ID](/docs/concepts/activities/activities-api-and-webhooks/retrieve-scheduled-activity-details-by-id-api)
* [Triggering External Workflows with Activity Webhooks](/docs/concepts/activities/activities-api-and-webhooks/triggering-external-activity-workflows-with-webhooks)

***

## What’s Next

Review the individual topics in this section to learn how to work with specific <code class="expression">space.vars.activity</code> endpoints, and webhook events. Each page includes an endpoint or event details, examples, and usage considerations.

<details>

<summary>Related Topics</summary>

* [Activities](/docs/concepts/activities)
* [Activities Core Concepts](/docs/concepts/activities/activities-core-concepts)
* [Activities Data Model](/docs/concepts/activities/activities-data-model)
* [Activity Permissions](/docs/concepts/activities/activity-permissions)
* [Advanced Activity Rules](/docs/concepts/activities/advanced-activity-rules)

</details>


# Schedule Activities API

Schedule Activities programmatically using the API to plan future actions and understand how scheduled Activities transition into logged Activity events.

{% hint style="success" %}
**Audience:** Developers and Solution Architects

**Purpose:** Enables programmatic creation, scheduling, and updating of Activities in <code class="expression">space.vars.Kizen\_company\_name</code> with clear, accurate, modern API documentation.
{% endhint %}

## Overview

Use the **Schedule Activities** endpoint to create <code class="expression">space.vars.activities</code> scheduled for a future date and time. Scheduled Activities allow external systems to manage upcoming actions (e.g. calls, tasks, events) and associate them with other records.

The material on this page builds on information covered on the [Activities Core Concepts](/docs/concepts/activities/activities-core-concepts) and [Activities Data Model](/docs/concepts/activities/activities-data-model).

### Why Use this API?

You can use the Scheduling <code class="expression">space.vars.activities</code> API when you need to:

* Sync reminders, tasks, or appointments from other platforms into <code class="expression">space.vars.Kizen\_company\_name</code>
* Assign tasks to team members
* Create multi-step sequences (e.g., onboarding, sales cadences)
* Sync reminders or appointments from other platforms into <code class="expression">space.vars.Kizen\_company\_name</code>
* Schedule upcoming calls, meetings, or check-ins tied to specific records

{% hint style="danger" %}
**Warning:** The API shown below can also log <code class="expression">space.vars.activities</code>, but logging through the use of this API is discouraged because partial or incorrect payloads can overwrite existing <code class="expression">space.vars.activity</code> data.
{% endhint %}

### Scheduling Activity API Behavior

Use this endpoint to schedule <code class="expression">space.vars.activities</code> for a future date and time and manage their lifecycle through the platform. It:

* Displays <code class="expression">space.vars.activities</code> with a `due_datetime` in the UI as future tasks
* May trigger an `activity.completed` webhook when a scheduled <code class="expression">space.vars.activity</code> is completed
* Maintains a Scheduled status until the <code class="expression">space.vars.activity</code> is logged, at which point it transitions to Completed
* Returns a response structured according to the [Activities Data Model](/docs/concepts/activities/activities-data-model) schema

***

## Schedule Activity Endpoint

Want to try the API out? Visit our [Swagger ](https://app.go.kizen.com/api/docs/public/swagger#/activities/activities_scheduled_activity_create)docs.

## POST /api/activities/scheduled-activity

> Create scheduled activity

```json
{"openapi":"3.0.3","info":{"title":"Kizen API","version":"1.0.0"},"security":[{"businessId":[],"userId":[],"apiKey":[]}],"components":{"securitySchemes":{"businessId":{"type":"apiKey","in":"header","name":"X-BUSINESS-ID"}},"schemas":{"ScheduledActivityV2WriteRequest":{"type":"object","properties":{"activity_object_id":{"type":"string","format":"uuid"},"activity_object_name":{"type":"string","nullable":true,"minLength":1},"due_datetime":{"type":"string","format":"date-time"},"original_due_datetime":{"type":"string","format":"date-time"},"employee_id":{"type":"string","format":"uuid","nullable":true},"role_id":{"type":"string","format":"uuid","nullable":true},"note":{"type":"string"},"mentions":{"type":"array","items":{"type":"string","format":"uuid","nullable":true}},"notifications":{"type":"array","items":{"$ref":"#/components/schemas/_ScheduledActivityNotificationV2WriteRequest"}},"associated_entities":{"type":"array","items":{"$ref":"#/components/schemas/_AssociatedEntityWriteRequest"},"nullable":true},"notify_mentioned":{"type":"boolean","default":false}}},"_ScheduledActivityNotificationV2WriteRequest":{"type":"object","properties":{"type":{"$ref":"#/components/schemas/NotificationTypeEnum"},"time_amount":{"type":"integer","maximum":2147483647,"minimum":1},"time_unit":{"$ref":"#/components/schemas/DelayTimeUnitEnum"}},"required":["time_amount","time_unit","type"]},"NotificationTypeEnum":{"enum":["email","text"],"type":"string","description":"* `email` - email\n* `text` - text"},"DelayTimeUnitEnum":{"enum":["minute","hour","day"],"type":"string","description":"* `minute` - minute\n* `hour` - hour\n* `day` - day"},"_AssociatedEntityWriteRequest":{"type":"object","properties":{"custom_object_id":{"type":"string","format":"uuid","nullable":true,"description":"This field is deprecated, use custom_object instead.","deprecated":true},"entity_id":{"type":"string","format":"uuid","nullable":true,"description":"This field is deprecated, use entity instead.","deprecated":true},"custom_object":{"allOf":[{"$ref":"#/components/schemas/_CustomObjectRequest"}],"nullable":true},"entity":{"allOf":[{"$ref":"#/components/schemas/EntityRequest"}],"nullable":true}}},"_CustomObjectRequest":{"type":"object","description":"A serializer that accepts either an 'id' field or an alternate identifier field.\n\nThis serializer class automatically detects which identifier field is being used and\nperforms validation to ensure at least one identifier is provided. It also provides\nutility methods for retrieving objects by their identifiers.\n\nAttributes:\n    IDENTIFIER_FIELD (str): The name of the alternate identifier field. Should be\n        defined in subclasses.\n\nMethods:\n    get_identifier_field(): Determines the alternate identifier field name.\n    validate(attrs): Ensures either 'id' or the alternate identifier is provided.\n    get_identifier_values(data, values_map, queryset): Retrieves objects by their identifiers.","properties":{"id":{"type":"string","format":"uuid","nullable":true,"description":"Required if \"name\" is not provided."},"name":{"type":"string","nullable":true,"minLength":1,"description":"Required if \"id\" is not provided."}}},"EntityRequest":{"type":"object","description":"A serializer that accepts either an 'id' field or an alternate identifier field.\n\nThis serializer class automatically detects which identifier field is being used and\nperforms validation to ensure at least one identifier is provided. It also provides\nutility methods for retrieving objects by their identifiers.\n\nAttributes:\n    IDENTIFIER_FIELD (str): The name of the alternate identifier field. Should be\n        defined in subclasses.\n\nMethods:\n    get_identifier_field(): Determines the alternate identifier field name.\n    validate(attrs): Ensures either 'id' or the alternate identifier is provided.\n    get_identifier_values(data, values_map, queryset): Retrieves objects by their identifiers.","properties":{"id":{"type":"string","format":"uuid","nullable":true,"description":"Required if \"name\" is not provided."},"name":{"type":"string","nullable":true,"minLength":1,"description":"Name of entity or email of contact."}}},"ScheduledActivityV2Read":{"type":"object","properties":{"associated_entities":{"type":"array","items":{"$ref":"#/components/schemas/_AssociatedEntityRead"}},"id":{"type":"string","format":"uuid"},"note":{"type":"string"},"due_datetime":{"type":"string","format":"date-time"},"original_due_datetime":{"type":"string","format":"date-time"},"completed_at":{"type":"string","format":"date-time"},"logged_activity_id":{"type":"string","format":"uuid"},"activity_object":{"type":"string"},"employee":{"type":"string"},"role":{"$ref":"#/components/schemas/SimpleRole"},"mentions":{"$ref":"#/components/schemas/EmployeeSerpy"},"associated_fields":{"type":"string"},"notifications":{"type":"string"},"created":{"type":"string","format":"date-time"},"access":{"$ref":"#/components/schemas/AccessSerpy"}},"required":["access","activity_object","associated_entities","associated_fields","completed_at","created","due_datetime","employee","id","logged_activity_id","mentions","note","notifications","original_due_datetime","role"]},"_AssociatedEntityRead":{"type":"object","properties":{"custom_object":{"$ref":"#/components/schemas/_CustomObjectRead"},"entity":{"$ref":"#/components/schemas/_EntityRead"},"custom_object_id":{"type":"string","format":"uuid","deprecated":true},"object_name":{"type":"string","deprecated":true},"object_api_name":{"type":"string","deprecated":true},"entity_id":{"type":"string","format":"uuid","deprecated":true},"name":{"type":"string","readOnly":true,"deprecated":true},"display_name":{"type":"string","readOnly":true,"deprecated":true}},"required":["custom_object","custom_object_id","display_name","entity","entity_id","name","object_api_name","object_name"]},"_CustomObjectRead":{"type":"object","properties":{"id":{"type":"string","format":"uuid"},"name":{"type":"string"},"object_name":{"type":"string"}},"required":["id","name","object_name"]},"_EntityRead":{"type":"object","properties":{"id":{"type":"string","format":"uuid"},"name":{"type":"string"},"email":{"type":"string","readOnly":true},"display_name":{"type":"string","readOnly":true}},"required":["display_name","email","id","name"]},"SimpleRole":{"type":"object","properties":{"id":{"type":"string","format":"uuid","readOnly":true},"name":{"type":"string","maxLength":200},"default_for_new_users":{"type":"boolean"}},"required":["id","name"]},"EmployeeSerpy":{"type":"object","properties":{"picture_url":{"type":"string"},"id":{"type":"string","format":"uuid"},"first_name":{"type":"string"},"last_name":{"type":"string"},"email":{"type":"string","format":"email"},"display_name":{"type":"string"},"account_type":{"type":"string"}},"required":["account_type","display_name","email","first_name","id","last_name","picture_url"]},"AccessSerpy":{"type":"object","properties":{"view":{"type":"boolean"},"edit":{"type":"boolean"},"remove":{"type":"boolean"}},"required":["edit","remove","view"]}}},"paths":{"/api/activities/scheduled-activity":{"post":{"operationId":"activities_scheduled_activity_create","description":"Create scheduled activity","tags":["activities"],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ScheduledActivityV2WriteRequest"}}}},"responses":{"201":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ScheduledActivityV2Read"}}},"description":""}}}}}}
```

### Scheduled Activity Schemas

## The ScheduledActivityV2WriteRequest object

```json
{"openapi":"3.0.3","info":{"title":"Kizen API","version":"1.0.0"},"components":{"schemas":{"ScheduledActivityV2WriteRequest":{"type":"object","properties":{"activity_object_id":{"type":"string","format":"uuid"},"activity_object_name":{"type":"string","nullable":true,"minLength":1},"due_datetime":{"type":"string","format":"date-time"},"original_due_datetime":{"type":"string","format":"date-time"},"employee_id":{"type":"string","format":"uuid","nullable":true},"role_id":{"type":"string","format":"uuid","nullable":true},"note":{"type":"string"},"mentions":{"type":"array","items":{"type":"string","format":"uuid","nullable":true}},"notifications":{"type":"array","items":{"$ref":"#/components/schemas/_ScheduledActivityNotificationV2WriteRequest"}},"associated_entities":{"type":"array","items":{"$ref":"#/components/schemas/_AssociatedEntityWriteRequest"},"nullable":true},"notify_mentioned":{"type":"boolean","default":false}}},"_ScheduledActivityNotificationV2WriteRequest":{"type":"object","properties":{"type":{"$ref":"#/components/schemas/NotificationTypeEnum"},"time_amount":{"type":"integer","maximum":2147483647,"minimum":1},"time_unit":{"$ref":"#/components/schemas/DelayTimeUnitEnum"}},"required":["time_amount","time_unit","type"]},"NotificationTypeEnum":{"enum":["email","text"],"type":"string","description":"* `email` - email\n* `text` - text"},"DelayTimeUnitEnum":{"enum":["minute","hour","day"],"type":"string","description":"* `minute` - minute\n* `hour` - hour\n* `day` - day"},"_AssociatedEntityWriteRequest":{"type":"object","properties":{"custom_object_id":{"type":"string","format":"uuid","nullable":true,"description":"This field is deprecated, use custom_object instead.","deprecated":true},"entity_id":{"type":"string","format":"uuid","nullable":true,"description":"This field is deprecated, use entity instead.","deprecated":true},"custom_object":{"allOf":[{"$ref":"#/components/schemas/_CustomObjectRequest"}],"nullable":true},"entity":{"allOf":[{"$ref":"#/components/schemas/EntityRequest"}],"nullable":true}}},"_CustomObjectRequest":{"type":"object","description":"A serializer that accepts either an 'id' field or an alternate identifier field.\n\nThis serializer class automatically detects which identifier field is being used and\nperforms validation to ensure at least one identifier is provided. It also provides\nutility methods for retrieving objects by their identifiers.\n\nAttributes:\n    IDENTIFIER_FIELD (str): The name of the alternate identifier field. Should be\n        defined in subclasses.\n\nMethods:\n    get_identifier_field(): Determines the alternate identifier field name.\n    validate(attrs): Ensures either 'id' or the alternate identifier is provided.\n    get_identifier_values(data, values_map, queryset): Retrieves objects by their identifiers.","properties":{"id":{"type":"string","format":"uuid","nullable":true,"description":"Required if \"name\" is not provided."},"name":{"type":"string","nullable":true,"minLength":1,"description":"Required if \"id\" is not provided."}}},"EntityRequest":{"type":"object","description":"A serializer that accepts either an 'id' field or an alternate identifier field.\n\nThis serializer class automatically detects which identifier field is being used and\nperforms validation to ensure at least one identifier is provided. It also provides\nutility methods for retrieving objects by their identifiers.\n\nAttributes:\n    IDENTIFIER_FIELD (str): The name of the alternate identifier field. Should be\n        defined in subclasses.\n\nMethods:\n    get_identifier_field(): Determines the alternate identifier field name.\n    validate(attrs): Ensures either 'id' or the alternate identifier is provided.\n    get_identifier_values(data, values_map, queryset): Retrieves objects by their identifiers.","properties":{"id":{"type":"string","format":"uuid","nullable":true,"description":"Required if \"name\" is not provided."},"name":{"type":"string","nullable":true,"minLength":1,"description":"Name of entity or email of contact."}}}}}}
```

## The ScheduledActivityV2Read object

```json
{"openapi":"3.0.3","info":{"title":"Kizen API","version":"1.0.0"},"components":{"schemas":{"ScheduledActivityV2Read":{"type":"object","properties":{"associated_entities":{"type":"array","items":{"$ref":"#/components/schemas/_AssociatedEntityRead"}},"id":{"type":"string","format":"uuid"},"note":{"type":"string"},"due_datetime":{"type":"string","format":"date-time"},"original_due_datetime":{"type":"string","format":"date-time"},"completed_at":{"type":"string","format":"date-time"},"logged_activity_id":{"type":"string","format":"uuid"},"activity_object":{"type":"string"},"employee":{"type":"string"},"role":{"$ref":"#/components/schemas/SimpleRole"},"mentions":{"$ref":"#/components/schemas/EmployeeSerpy"},"associated_fields":{"type":"string"},"notifications":{"type":"string"},"created":{"type":"string","format":"date-time"},"access":{"$ref":"#/components/schemas/AccessSerpy"}},"required":["access","activity_object","associated_entities","associated_fields","completed_at","created","due_datetime","employee","id","logged_activity_id","mentions","note","notifications","original_due_datetime","role"]},"_AssociatedEntityRead":{"type":"object","properties":{"custom_object":{"$ref":"#/components/schemas/_CustomObjectRead"},"entity":{"$ref":"#/components/schemas/_EntityRead"},"custom_object_id":{"type":"string","format":"uuid","deprecated":true},"object_name":{"type":"string","deprecated":true},"object_api_name":{"type":"string","deprecated":true},"entity_id":{"type":"string","format":"uuid","deprecated":true},"name":{"type":"string","readOnly":true,"deprecated":true},"display_name":{"type":"string","readOnly":true,"deprecated":true}},"required":["custom_object","custom_object_id","display_name","entity","entity_id","name","object_api_name","object_name"]},"_CustomObjectRead":{"type":"object","properties":{"id":{"type":"string","format":"uuid"},"name":{"type":"string"},"object_name":{"type":"string"}},"required":["id","name","object_name"]},"_EntityRead":{"type":"object","properties":{"id":{"type":"string","format":"uuid"},"name":{"type":"string"},"email":{"type":"string","readOnly":true},"display_name":{"type":"string","readOnly":true}},"required":["display_name","email","id","name"]},"SimpleRole":{"type":"object","properties":{"id":{"type":"string","format":"uuid","readOnly":true},"name":{"type":"string","maxLength":200},"default_for_new_users":{"type":"boolean"}},"required":["id","name"]},"EmployeeSerpy":{"type":"object","properties":{"picture_url":{"type":"string"},"id":{"type":"string","format":"uuid"},"first_name":{"type":"string"},"last_name":{"type":"string"},"email":{"type":"string","format":"email"},"display_name":{"type":"string"},"account_type":{"type":"string"}},"required":["account_type","display_name","email","first_name","id","last_name","picture_url"]},"AccessSerpy":{"type":"object","properties":{"view":{"type":"boolean"},"edit":{"type":"boolean"},"remove":{"type":"boolean"}},"required":["edit","remove","view"]}}}}
```

***

## What's Next?

After scheduling <code class="expression">space.vars.activities</code> via the API, you can:

* Create scheduled <code class="expression">space.vars.activities</code> as business needs change.
* Understand when a scheduled <code class="expression">space.vars.activity</code> becomes a logged <code class="expression">space.vars.activity</code>.
* Use Scheduled <code class="expression">space.vars.activities</code> alongside <code class="expression">space.vars.automations</code> that depend on <code class="expression">space.vars.activity</code> timing.

For more information on <code class="expression">space.vars.activities</code>, check out the following topics:

<details>

<summary>Related Topics</summary>

* [Activities](/docs/concepts/activities)
* [Activities Core Concepts](/docs/concepts/activities/activities-core-concepts)
* [Activities Data Model](/docs/concepts/activities/activities-data-model)
* [Activity Permissions](/docs/concepts/activities/activity-permissions)
* [Advanced Activity Rules](/docs/concepts/activities/advanced-activity-rules)
* [Activities API & Webhooks](/docs/concepts/activities/activities-api-and-webhooks)

</details>


# View Logged Activity Details API

Retrieve logged Activities programmatically using the API to access completed interactions and support validation, synchronization, and reporting workflows.

{% hint style="success" %}
**Audience:** Developers and Solution Architects

**Purpose:** Enables programmatic logging of Activities in <code class="expression">space.vars.Kizen\_company\_name</code> with clear, accurate, modern API documentation.
{% endhint %}

## Overview

Use the **View Logged Activity Details** endpoint allows you to retrieve the full details of a logged <code class="expression">space.vars.activity</code> by its unique ID, providing access to metadata, associations, and submitted field values captured at the time the <code class="expression">space.vars.activity</code> was logged.

The material on this page builds on information covered on the [Activities Core Concepts](/docs/concepts/activities/activities-core-concepts) and [Activities Data Model](/docs/concepts/activities/activities-data-model).

### Why Would I Use this API?

You can use the Logged <code class="expression">space.vars.activity</code> retrieval API when you need to:

* Validate that an <code class="expression">space.vars.activity</code> was logged correctly
* Synchronize completed <code class="expression">space.vars.activity</code> data with external systems
* Support audit, compliance, or reporting workflows
* Debug integrations or <code class="expression">space.vars.automations</code> that log <code class="expression">space.vars.activities</code>
* Retrieve submitted field values for downstream processing

### View Logged Activity Details API Behavior

Use this endpoint to create and retrieve logged <code class="expression">space.vars.activities</code> that represent completed interactions within the platform. It:

* Returns a unique logged <code class="expression">space.vars.activity</code> ID that can be used for future retrieval
* Includes <code class="expression">space.vars.activity</code> type metadata, timestamps, the logging user, and associated <code class="expression">space.vars.entities</code>
* Returns structured field values in `fields[]` when present, with value formats varying by field type
* Populates `scheduled_activity_id` when the logged <code class="expression">space.vars.activity</code> originated from a scheduled <code class="expression">space.vars.activity</code>; otherwise returns null
* Includes completion metadata, where `completed_at` is populated only when explicitly marked as completed
* Sets `logged_at` to the record creation timestamp, which reflects when the <code class="expression">space.vars.activity</code> was logged and appears in the UI
* Sets `completed_at` to the completion timestamp from the associated scheduled <code class="expression">space.vars.activity</code> when applicable

***

## View Logged Activity Details Endpoint

Want to try the API out? Visit our [Swagger](https://app.go.kizen.com/api/docs/public/swagger#/activities/activities_logged_retrieve) docs.

## GET /api/activities/logged/{id}

> Get logged activity record by ID

```json
{"openapi":"3.0.3","info":{"title":"Kizen API","version":"1.0.0"},"security":[{"businessId":[],"userId":[],"apiKey":[]}],"components":{"securitySchemes":{"businessId":{"type":"apiKey","in":"header","name":"X-BUSINESS-ID"}},"schemas":{"LogActivityRead":{"type":"object","properties":{"fields":{"type":"array","items":{"$ref":"#/components/schemas/LoggedActivityRecordField"}},"id":{"type":"string","format":"uuid"},"notes":{"type":"string"},"activity_object":{"allOf":[{"$ref":"#/components/schemas/_ActivityObject"}],"readOnly":true},"associated_entities":{"type":"array","items":{"$ref":"#/components/schemas/AssociatedEntity"},"readOnly":true},"logged_at":{"type":"string","format":"date-time"},"logged_by":{"$ref":"#/components/schemas/EmbedEmployee"},"completed_at":{"type":"string","format":"date-time","nullable":true,"readOnly":true},"completed_by":{"allOf":[{"$ref":"#/components/schemas/SerializerMeta"}],"readOnly":true},"scheduled_activity_id":{"type":"string","format":"uuid","nullable":true,"readOnly":true},"mentions":{"type":"array","items":{"type":"string","format":"uuid"},"readOnly":true}},"required":["activity_object","associated_entities","completed_at","completed_by","id","logged_at","logged_by","mentions","notes","scheduled_activity_id"]},"LoggedActivityRecordField":{"type":"object","properties":{"value":{"nullable":true},"id":{"type":"string","format":"uuid"},"field_type":{"type":"string","readOnly":true},"custom_field_type":{"type":"string","nullable":true,"readOnly":true},"name":{"type":"string","readOnly":true},"display_name":{"type":"string","readOnly":true}},"required":["custom_field_type","display_name","field_type","id","name"]},"_ActivityObject":{"type":"object","properties":{"id":{"type":"string","format":"uuid"},"name":{"type":"string"},"api_name":{"type":"string"},"association_mode":{"type":"string"}},"required":["api_name","association_mode","id","name"]},"AssociatedEntity":{"type":"object","properties":{"custom_object_id":{"type":"string","format":"uuid"},"object_name":{"type":"string"},"entity_id":{"type":"string","format":"uuid"},"name":{"type":"string"},"display_name":{"type":"string"},"custom_object_name":{"type":"string"},"object_api_name":{"type":"string"}},"required":["custom_object_id","custom_object_name","display_name","entity_id","name","object_api_name","object_name"]},"EmbedEmployee":{"type":"object","properties":{"id":{"type":"string","format":"uuid"},"name":{"type":"string"},"full_name":{"type":"string"},"display_name":{"type":"string"},"email":{"type":"string","format":"email"},"deleted":{"type":"boolean"}},"required":["deleted","display_name","email","full_name","id","name"]},"SerializerMeta":{"type":"object","properties":{"picture_url":{"type":"string"},"id":{"type":"string","format":"uuid"},"first_name":{"type":"string"},"last_name":{"type":"string"},"email":{"type":"string","format":"email"},"display_name":{"type":"string"},"account_type":{"type":"string"}},"required":["account_type","display_name","email","first_name","id","last_name","picture_url"]}}},"paths":{"/api/activities/logged/{id}":{"get":{"operationId":"activities_logged_retrieve","description":"Get logged activity record by ID","parameters":[{"in":"path","name":"id","schema":{"type":"string","format":"uuid"},"description":"A UUID string identifying this logged activity record.","required":true}],"tags":["activities"],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/LogActivityRead"}}},"description":""}}}}}}
```

### View Logged Activity Details Schema

## The LogActivityRead object

```json
{"openapi":"3.0.3","info":{"title":"Kizen API","version":"1.0.0"},"components":{"schemas":{"LogActivityRead":{"type":"object","properties":{"fields":{"type":"array","items":{"$ref":"#/components/schemas/LoggedActivityRecordField"}},"id":{"type":"string","format":"uuid"},"notes":{"type":"string"},"activity_object":{"allOf":[{"$ref":"#/components/schemas/_ActivityObject"}],"readOnly":true},"associated_entities":{"type":"array","items":{"$ref":"#/components/schemas/AssociatedEntity"},"readOnly":true},"logged_at":{"type":"string","format":"date-time"},"logged_by":{"$ref":"#/components/schemas/EmbedEmployee"},"completed_at":{"type":"string","format":"date-time","nullable":true,"readOnly":true},"completed_by":{"allOf":[{"$ref":"#/components/schemas/SerializerMeta"}],"readOnly":true},"scheduled_activity_id":{"type":"string","format":"uuid","nullable":true,"readOnly":true},"mentions":{"type":"array","items":{"type":"string","format":"uuid"},"readOnly":true}},"required":["activity_object","associated_entities","completed_at","completed_by","id","logged_at","logged_by","mentions","notes","scheduled_activity_id"]},"LoggedActivityRecordField":{"type":"object","properties":{"value":{"nullable":true},"id":{"type":"string","format":"uuid"},"field_type":{"type":"string","readOnly":true},"custom_field_type":{"type":"string","nullable":true,"readOnly":true},"name":{"type":"string","readOnly":true},"display_name":{"type":"string","readOnly":true}},"required":["custom_field_type","display_name","field_type","id","name"]},"_ActivityObject":{"type":"object","properties":{"id":{"type":"string","format":"uuid"},"name":{"type":"string"},"api_name":{"type":"string"},"association_mode":{"type":"string"}},"required":["api_name","association_mode","id","name"]},"AssociatedEntity":{"type":"object","properties":{"custom_object_id":{"type":"string","format":"uuid"},"object_name":{"type":"string"},"entity_id":{"type":"string","format":"uuid"},"name":{"type":"string"},"display_name":{"type":"string"},"custom_object_name":{"type":"string"},"object_api_name":{"type":"string"}},"required":["custom_object_id","custom_object_name","display_name","entity_id","name","object_api_name","object_name"]},"EmbedEmployee":{"type":"object","properties":{"id":{"type":"string","format":"uuid"},"name":{"type":"string"},"full_name":{"type":"string"},"display_name":{"type":"string"},"email":{"type":"string","format":"email"},"deleted":{"type":"boolean"}},"required":["deleted","display_name","email","full_name","id","name"]},"SerializerMeta":{"type":"object","properties":{"picture_url":{"type":"string"},"id":{"type":"string","format":"uuid"},"first_name":{"type":"string"},"last_name":{"type":"string"},"email":{"type":"string","format":"email"},"display_name":{"type":"string"},"account_type":{"type":"string"}},"required":["account_type","display_name","email","first_name","id","last_name","picture_url"]}}}}
```

***

## What's Next?

After retrieving logged <code class="expression">space.vars.activities</code> via the API, you can:

* Validate or audit completed <code class="expression">space.vars.activities</code>
* Synchronize logged <code class="expression">space.vars.activity</code> data with external systems
* Use logged <code class="expression">space.vars.activities</code> in reporting, analytics, or downstream workflows

For more information on logged <code class="expression">space.vars.activities</code>, check out the following topics below:

<details>

<summary>Related Topics</summary>

* [Activities](/docs/concepts/activities)
* [Activities Core Concepts](/docs/concepts/activities/activities-core-concepts)
* [Activities Data Model](/docs/concepts/activities/activities-data-model)
* [Activity Permissions](/docs/concepts/activities/activity-permissions)
* [Advanced Activity Rules](/docs/concepts/activities/advanced-activity-rules)
* [Activities API & Webhooks](/docs/concepts/activities/activities-api-and-webhooks)

</details>


# List Scheduled Activities API

Learn how to list scheduled Activities using the Kizen API to retrieve upcoming work, sync schedules, and support planning and operational workflows.

{% hint style="success" %}
**Audience:** Developers and Solution Architects

**Purpose:** Enables you to retrieve, inspect, and synchronize upcoming scheduled Activities at scale.
{% endhint %}

## Overview

Use the **List Scheduled Activities** endpoint to retrieve a list of your Scheduled <code class="expression">space.vars.activities</code>, which represent planned future interactions that have not yet been logged or completed. Scheduled <code class="expression">space.vars.activities</code> represent upcoming work such as calls, meetings, tasks, or custom Activity types and are commonly used for planning, calendar views, reminders, and operational workflows. &#x20;

This endpoint is designed for overview and discovery use cases, allowing external systems to surface upcoming <code class="expression">space.vars.activities</code>, filter by date or owner, and synchronize schedules at scale.

The material on this page builds on information covered on the [Activities Core Concepts](/docs/concepts/activities/activities-core-concepts) and [Activities Data Model](/docs/concepts/activities/activities-data-model).

{% hint style="info" %}
**Note:** This API provides a full list of all your Scheduled Activities without details. To retrieve full details for a single Scheduled Activity, check out [Retrieve Scheduled Activity Details by ID API](/docs/concepts/activities/activities-api-and-webhooks/retrieve-scheduled-activity-details-by-id-api).
{% endhint %}

### Why Would I Use this API?

You can use the Listing Scheduled <code class="expression">space.vars.activities</code> APIs when you need to:

* Display upcoming <code class="expression">space.vars.activities</code> in external applications, calendars, or task views
* Synchronize <code class="expression">space.vars.activity</code> schedules with external planning or calendar systems
* Drive reminders or notifications based on future work
* Support planning, workload management, or operational workflows
* Distinguish Scheduled <code class="expression">space.vars.activities</code> from Logged <code class="expression">space.vars.activities</code>

### List Scheduled Activities API Behavior

Use this endpoint to retrieve Scheduled <code class="expression">space.vars.activities</code> and evaluate their current planned state within the platform. It:

* Returns Scheduled <code class="expression">space.vars.activities</code> based on their current status
* Displays Scheduled <code class="expression">space.vars.activities</code> in the UI as upcoming tasks based on `due_datetime`
* Maintains a Scheduled state until the <code class="expression">space.vars.activity</code> is logged
* Transitions the <code class="expression">space.vars.activity</code> to Completed when it is logged
* May trigger an `activity.completed` webhook when a Scheduled <code class="expression">space.vars.activity</code> is completed
* Includes completion metadata such as `completed_at` and `logged_activity_id` when applicable
* Returns response objects structured according to the [Activities Data Model](/docs/concepts/activities/activities-data-model) schema

***

## List Scheduled Activities Endpoint

Want to try this endpoint out? Visit our [Swagger](https://app.go.kizen.com/api/docs/public/swagger#/activities/activities_scheduled_activity_list) docs.

## GET /api/activities/scheduled-activity

> List Scheduled Activities

```json
{"openapi":"3.0.3","info":{"title":"Kizen API","version":"1.0.0"},"security":[{"businessId":[],"userId":[],"apiKey":[]}],"components":{"securitySchemes":{"businessId":{"type":"apiKey","in":"header","name":"X-BUSINESS-ID"}},"schemas":{"PaginatedScheduledActivityV2ReadList":{"type":"object","required":["count","results"],"properties":{"count":{"type":"integer"},"next":{"type":"string","nullable":true,"format":"uri"},"previous":{"type":"string","nullable":true,"format":"uri"},"results":{"type":"array","items":{"$ref":"#/components/schemas/ScheduledActivityV2Read"}},"errors":{"oneOf":[{"type":"null"},{"type":"array","items":{"type":"string"}}]}}},"ScheduledActivityV2Read":{"type":"object","properties":{"associated_entities":{"type":"array","items":{"$ref":"#/components/schemas/_AssociatedEntityRead"}},"id":{"type":"string","format":"uuid"},"note":{"type":"string"},"due_datetime":{"type":"string","format":"date-time"},"original_due_datetime":{"type":"string","format":"date-time"},"completed_at":{"type":"string","format":"date-time"},"logged_activity_id":{"type":"string","format":"uuid"},"activity_object":{"type":"string"},"employee":{"type":"string"},"role":{"$ref":"#/components/schemas/SimpleRole"},"mentions":{"$ref":"#/components/schemas/EmployeeSerpy"},"associated_fields":{"type":"string"},"notifications":{"type":"string"},"created":{"type":"string","format":"date-time"},"access":{"$ref":"#/components/schemas/AccessSerpy"}},"required":["access","activity_object","associated_entities","associated_fields","completed_at","created","due_datetime","employee","id","logged_activity_id","mentions","note","notifications","original_due_datetime","role"]},"_AssociatedEntityRead":{"type":"object","properties":{"custom_object":{"$ref":"#/components/schemas/_CustomObjectRead"},"entity":{"$ref":"#/components/schemas/_EntityRead"},"custom_object_id":{"type":"string","format":"uuid","deprecated":true},"object_name":{"type":"string","deprecated":true},"object_api_name":{"type":"string","deprecated":true},"entity_id":{"type":"string","format":"uuid","deprecated":true},"name":{"type":"string","readOnly":true,"deprecated":true},"display_name":{"type":"string","readOnly":true,"deprecated":true}},"required":["custom_object","custom_object_id","display_name","entity","entity_id","name","object_api_name","object_name"]},"_CustomObjectRead":{"type":"object","properties":{"id":{"type":"string","format":"uuid"},"name":{"type":"string"},"object_name":{"type":"string"}},"required":["id","name","object_name"]},"_EntityRead":{"type":"object","properties":{"id":{"type":"string","format":"uuid"},"name":{"type":"string"},"email":{"type":"string","readOnly":true},"display_name":{"type":"string","readOnly":true}},"required":["display_name","email","id","name"]},"SimpleRole":{"type":"object","properties":{"id":{"type":"string","format":"uuid","readOnly":true},"name":{"type":"string","maxLength":200},"default_for_new_users":{"type":"boolean"}},"required":["id","name"]},"EmployeeSerpy":{"type":"object","properties":{"picture_url":{"type":"string"},"id":{"type":"string","format":"uuid"},"first_name":{"type":"string"},"last_name":{"type":"string"},"email":{"type":"string","format":"email"},"display_name":{"type":"string"},"account_type":{"type":"string"}},"required":["account_type","display_name","email","first_name","id","last_name","picture_url"]},"AccessSerpy":{"type":"object","properties":{"view":{"type":"boolean"},"edit":{"type":"boolean"},"remove":{"type":"boolean"}},"required":["edit","remove","view"]}}},"paths":{"/api/activities/scheduled-activity":{"get":{"operationId":"activities_scheduled_activity_list","description":"List Scheduled Activities","parameters":[{"in":"query","name":"assigned_to_me","schema":{"type":"boolean"},"description":"Filter Scheduled Activities assigned to the logged in employee"},{"in":"query","name":"completed","schema":{"type":"boolean"},"description":"Filter Scheduled Activities that have had a logged activity"},{"in":"query","name":"employee_ids","schema":{"type":"array","minItems":0,"maxItems":250,"items":{"type":"uuid"}},"description":"Filter Scheduled Activities by Team Members UUIDs","explode":false,"style":"form"},{"in":"query","name":"from_date","schema":{"type":"string","format":"date"},"description":"Filter Scheduled Activities Due Datetime starting from date"},{"in":"query","name":"ordering","schema":{"type":"string"},"description":"Order Scheduled Activities by field. The negative sign in front of the '-activity_object' indicates descending order"},{"name":"page","required":false,"in":"query","description":"A page number within the paginated result set.","schema":{"type":"integer"}},{"name":"page_size","required":false,"in":"query","description":"Number of results to return per page.","schema":{"type":"integer"}},{"in":"query","name":"role_ids","schema":{"type":"array","minItems":0,"maxItems":250,"items":{"type":"uuid"}},"description":"Filter Scheduled Activities by Role UUIDs","explode":false,"style":"form"},{"in":"query","name":"search","schema":{"type":"string"}},{"in":"query","name":"to_date","schema":{"type":"string","format":"date"},"description":"Filter Scheduled Activities Due Datetime ending on date"}],"tags":["activities"],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/PaginatedScheduledActivityV2ReadList"}}},"description":""}}}}}}
```

### List Scheduled Activities Schema

## The PaginatedScheduledActivityV2ReadList object

```json
{"openapi":"3.0.3","info":{"title":"Kizen API","version":"1.0.0"},"components":{"schemas":{"PaginatedScheduledActivityV2ReadList":{"type":"object","required":["count","results"],"properties":{"count":{"type":"integer"},"next":{"type":"string","nullable":true,"format":"uri"},"previous":{"type":"string","nullable":true,"format":"uri"},"results":{"type":"array","items":{"$ref":"#/components/schemas/ScheduledActivityV2Read"}},"errors":{"oneOf":[{"type":"null"},{"type":"array","items":{"type":"string"}}]}}},"ScheduledActivityV2Read":{"type":"object","properties":{"associated_entities":{"type":"array","items":{"$ref":"#/components/schemas/_AssociatedEntityRead"}},"id":{"type":"string","format":"uuid"},"note":{"type":"string"},"due_datetime":{"type":"string","format":"date-time"},"original_due_datetime":{"type":"string","format":"date-time"},"completed_at":{"type":"string","format":"date-time"},"logged_activity_id":{"type":"string","format":"uuid"},"activity_object":{"type":"string"},"employee":{"type":"string"},"role":{"$ref":"#/components/schemas/SimpleRole"},"mentions":{"$ref":"#/components/schemas/EmployeeSerpy"},"associated_fields":{"type":"string"},"notifications":{"type":"string"},"created":{"type":"string","format":"date-time"},"access":{"$ref":"#/components/schemas/AccessSerpy"}},"required":["access","activity_object","associated_entities","associated_fields","completed_at","created","due_datetime","employee","id","logged_activity_id","mentions","note","notifications","original_due_datetime","role"]},"_AssociatedEntityRead":{"type":"object","properties":{"custom_object":{"$ref":"#/components/schemas/_CustomObjectRead"},"entity":{"$ref":"#/components/schemas/_EntityRead"},"custom_object_id":{"type":"string","format":"uuid","deprecated":true},"object_name":{"type":"string","deprecated":true},"object_api_name":{"type":"string","deprecated":true},"entity_id":{"type":"string","format":"uuid","deprecated":true},"name":{"type":"string","readOnly":true,"deprecated":true},"display_name":{"type":"string","readOnly":true,"deprecated":true}},"required":["custom_object","custom_object_id","display_name","entity","entity_id","name","object_api_name","object_name"]},"_CustomObjectRead":{"type":"object","properties":{"id":{"type":"string","format":"uuid"},"name":{"type":"string"},"object_name":{"type":"string"}},"required":["id","name","object_name"]},"_EntityRead":{"type":"object","properties":{"id":{"type":"string","format":"uuid"},"name":{"type":"string"},"email":{"type":"string","readOnly":true},"display_name":{"type":"string","readOnly":true}},"required":["display_name","email","id","name"]},"SimpleRole":{"type":"object","properties":{"id":{"type":"string","format":"uuid","readOnly":true},"name":{"type":"string","maxLength":200},"default_for_new_users":{"type":"boolean"}},"required":["id","name"]},"EmployeeSerpy":{"type":"object","properties":{"picture_url":{"type":"string"},"id":{"type":"string","format":"uuid"},"first_name":{"type":"string"},"last_name":{"type":"string"},"email":{"type":"string","format":"email"},"display_name":{"type":"string"},"account_type":{"type":"string"}},"required":["account_type","display_name","email","first_name","id","last_name","picture_url"]},"AccessSerpy":{"type":"object","properties":{"view":{"type":"boolean"},"edit":{"type":"boolean"},"remove":{"type":"boolean"}},"required":["edit","remove","view"]}}}}
```

***

## What’s Next?

After retrieving scheduled <code class="expression">space.vars.activities</code> via the API, you can:

* Display upcoming work in external applications or calendar views
* Retrieve full details for a specific scheduled <code class="expression">space.vars.activity</code> by ID
* Monitor when scheduled <code class="expression">space.vars.activities</code> transition into logged <code class="expression">space.vars.activities</code>
* Use scheduled <code class="expression">space.vars.activity</code> data in <code class="expression">space.vars.automations</code> that depend on timing

For more information on scheduled and logged <code class="expression">space.vars.activities</code>, check out the following topics below:

<details>

<summary>Related Topics</summary>

* [Activities](/docs/concepts/activities)
* [Activities Core Concepts](/docs/concepts/activities/activities-core-concepts)
* [Activities Data Model](/docs/concepts/activities/activities-data-model)
* [Activity Permissions](/docs/concepts/activities/activity-permissions)
* [Advanced Activity Rules](/docs/concepts/activities/advanced-activity-rules)
* [Activities API & Webhooks](/docs/concepts/activities/activities-api-and-webhooks)

</details>


# Retrieve Scheduled Activity Details by ID API

Learn how to retrieve full details for a scheduled Activity by ID using the Kizen API, including scheduling metadata, ownership, and completion status.

{% hint style="success" %}
**Audience:** Developers and Solution Architects

**Purpose:** Enables you to retrieve the full details of a single scheduled Activity by ID using the Kizen API.
{% endhint %}

## Overview

Use the **Retrieve Scheduled Activity Details by ID** endpoint to fetch the complete details of a single Scheduled Activity using its unique identifier. This includes scheduling information, ownership, associations, notes, and completion metadata needed to fully understand or act on a specific planned Activity.

This endpoint is designed for detail-oriented use cases, such as inspecting a selected Scheduled Activity after discovery, validating scheduling state or timing, or retrieving authoritative data for synchronization, troubleshooting, or <code class="expression">space.vars.automations</code>.

The material on this page builds on information covered on the [Activities Core Concepts](/docs/concepts/activities/activities-core-concepts) and [Activities Data Model](/docs/concepts/activities/activities-data-model).

{% hint style="info" %}
**Note:** This API pulls the details of only one <code class="expression">space.vars.activity</code> by ID. To retrieve a full list of all your Scheduled Activities without details, check out [List Scheduled Activities API](/docs/concepts/activities/activities-api-and-webhooks/list-scheduled-activities-api).
{% endhint %}

### Why Would I Use This API?

You can use the Retrieving Scheduled Activity Details by ID API when you need to:

* Retrieve the complete, authoritative details for a single Scheduled <code class="expression">space.vars.activity</code> by ID
* Inspect scheduling metadata, ownership, associations, and notes for a selected Logged Activity
* Confirm whether a Scheduled <code class="expression">space.vars.activity</code> is still upcoming or has been completed and logged
* Synchronize a known Scheduled <code class="expression">space.vars.activity</code> with external systems after discovery
* Validate scheduling state or timing for troubleshooting, automation, or reconciliation workflows
* Follow the transition of a Scheduled <code class="expression">space.vars.activity</code> into a Logged <code class="expression">space.vars.activity</code> using completion metadata

### Retrieve Scheduled Activity Details by ID API Behavior

Use this endpoint to retrieve a single Scheduled <code class="expression">space.vars.activity</code> and evaluate its current planned state within the platform. It:

* Returns a Scheduled <code class="expression">space.vars.activity</code> by its unique identifier
* Displays the Scheduled <code class="expression">space.vars.activity</code> in the UI as an upcoming task based on `due_datetime`
* Maintains a Scheduled state until the <code class="expression">space.vars.activity</code> is completed and logged
* May trigger an `activity.completed` webhook when the Scheduled <code class="expression">space.vars.activity</code> is completed
* Marks the Scheduled <code class="expression">space.vars.activity</code> as Completed and includes metadata such as `completed_at` and `logged_activity_id` once logged
* Returns a response structured according to the [Activities Data Model](/docs/concepts/activities/activities-data-model) schema

***

## Retrieve Scheduled Activity Details by ID Endpoint

Want to try this endpoint out? Visit our [Swagger](https://app.go.kizen.com/api/docs/public/swagger#/activities/activities_scheduled_activity_retrieve) docs.

## GET /api/activities/scheduled-activity/{id}

> Get scheduled activity record by ID

```json
{"openapi":"3.0.3","info":{"title":"Kizen API","version":"1.0.0"},"security":[{"businessId":[],"userId":[],"apiKey":[]}],"components":{"securitySchemes":{"businessId":{"type":"apiKey","in":"header","name":"X-BUSINESS-ID"}},"schemas":{"ScheduledActivityV2Read":{"type":"object","properties":{"associated_entities":{"type":"array","items":{"$ref":"#/components/schemas/_AssociatedEntityRead"}},"id":{"type":"string","format":"uuid"},"note":{"type":"string"},"due_datetime":{"type":"string","format":"date-time"},"original_due_datetime":{"type":"string","format":"date-time"},"completed_at":{"type":"string","format":"date-time"},"logged_activity_id":{"type":"string","format":"uuid"},"activity_object":{"type":"string"},"employee":{"type":"string"},"role":{"$ref":"#/components/schemas/SimpleRole"},"mentions":{"$ref":"#/components/schemas/EmployeeSerpy"},"associated_fields":{"type":"string"},"notifications":{"type":"string"},"created":{"type":"string","format":"date-time"},"access":{"$ref":"#/components/schemas/AccessSerpy"}},"required":["access","activity_object","associated_entities","associated_fields","completed_at","created","due_datetime","employee","id","logged_activity_id","mentions","note","notifications","original_due_datetime","role"]},"_AssociatedEntityRead":{"type":"object","properties":{"custom_object":{"$ref":"#/components/schemas/_CustomObjectRead"},"entity":{"$ref":"#/components/schemas/_EntityRead"},"custom_object_id":{"type":"string","format":"uuid","deprecated":true},"object_name":{"type":"string","deprecated":true},"object_api_name":{"type":"string","deprecated":true},"entity_id":{"type":"string","format":"uuid","deprecated":true},"name":{"type":"string","readOnly":true,"deprecated":true},"display_name":{"type":"string","readOnly":true,"deprecated":true}},"required":["custom_object","custom_object_id","display_name","entity","entity_id","name","object_api_name","object_name"]},"_CustomObjectRead":{"type":"object","properties":{"id":{"type":"string","format":"uuid"},"name":{"type":"string"},"object_name":{"type":"string"}},"required":["id","name","object_name"]},"_EntityRead":{"type":"object","properties":{"id":{"type":"string","format":"uuid"},"name":{"type":"string"},"email":{"type":"string","readOnly":true},"display_name":{"type":"string","readOnly":true}},"required":["display_name","email","id","name"]},"SimpleRole":{"type":"object","properties":{"id":{"type":"string","format":"uuid","readOnly":true},"name":{"type":"string","maxLength":200},"default_for_new_users":{"type":"boolean"}},"required":["id","name"]},"EmployeeSerpy":{"type":"object","properties":{"picture_url":{"type":"string"},"id":{"type":"string","format":"uuid"},"first_name":{"type":"string"},"last_name":{"type":"string"},"email":{"type":"string","format":"email"},"display_name":{"type":"string"},"account_type":{"type":"string"}},"required":["account_type","display_name","email","first_name","id","last_name","picture_url"]},"AccessSerpy":{"type":"object","properties":{"view":{"type":"boolean"},"edit":{"type":"boolean"},"remove":{"type":"boolean"}},"required":["edit","remove","view"]}}},"paths":{"/api/activities/scheduled-activity/{id}":{"get":{"operationId":"activities_scheduled_activity_retrieve","description":"Get scheduled activity record by ID","parameters":[{"in":"path","name":"id","schema":{"type":"string","pattern":"^[0-9a-fA-F]{8}\\-[0-9a-fA-F]{4}\\-[0-9a-fA-F]{4}\\-[0-9a-fA-F]{4}\\-[0-9a-fA-F]{12}$"},"required":true}],"tags":["activities"],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ScheduledActivityV2Read"}}},"description":""}}}}}}
```

### Retrieve Scheduled Activity Details by ID APISchema

## The ScheduledActivityV2Read object

```json
{"openapi":"3.0.3","info":{"title":"Kizen API","version":"1.0.0"},"components":{"schemas":{"ScheduledActivityV2Read":{"type":"object","properties":{"associated_entities":{"type":"array","items":{"$ref":"#/components/schemas/_AssociatedEntityRead"}},"id":{"type":"string","format":"uuid"},"note":{"type":"string"},"due_datetime":{"type":"string","format":"date-time"},"original_due_datetime":{"type":"string","format":"date-time"},"completed_at":{"type":"string","format":"date-time"},"logged_activity_id":{"type":"string","format":"uuid"},"activity_object":{"type":"string"},"employee":{"type":"string"},"role":{"$ref":"#/components/schemas/SimpleRole"},"mentions":{"$ref":"#/components/schemas/EmployeeSerpy"},"associated_fields":{"type":"string"},"notifications":{"type":"string"},"created":{"type":"string","format":"date-time"},"access":{"$ref":"#/components/schemas/AccessSerpy"}},"required":["access","activity_object","associated_entities","associated_fields","completed_at","created","due_datetime","employee","id","logged_activity_id","mentions","note","notifications","original_due_datetime","role"]},"_AssociatedEntityRead":{"type":"object","properties":{"custom_object":{"$ref":"#/components/schemas/_CustomObjectRead"},"entity":{"$ref":"#/components/schemas/_EntityRead"},"custom_object_id":{"type":"string","format":"uuid","deprecated":true},"object_name":{"type":"string","deprecated":true},"object_api_name":{"type":"string","deprecated":true},"entity_id":{"type":"string","format":"uuid","deprecated":true},"name":{"type":"string","readOnly":true,"deprecated":true},"display_name":{"type":"string","readOnly":true,"deprecated":true}},"required":["custom_object","custom_object_id","display_name","entity","entity_id","name","object_api_name","object_name"]},"_CustomObjectRead":{"type":"object","properties":{"id":{"type":"string","format":"uuid"},"name":{"type":"string"},"object_name":{"type":"string"}},"required":["id","name","object_name"]},"_EntityRead":{"type":"object","properties":{"id":{"type":"string","format":"uuid"},"name":{"type":"string"},"email":{"type":"string","readOnly":true},"display_name":{"type":"string","readOnly":true}},"required":["display_name","email","id","name"]},"SimpleRole":{"type":"object","properties":{"id":{"type":"string","format":"uuid","readOnly":true},"name":{"type":"string","maxLength":200},"default_for_new_users":{"type":"boolean"}},"required":["id","name"]},"EmployeeSerpy":{"type":"object","properties":{"picture_url":{"type":"string"},"id":{"type":"string","format":"uuid"},"first_name":{"type":"string"},"last_name":{"type":"string"},"email":{"type":"string","format":"email"},"display_name":{"type":"string"},"account_type":{"type":"string"}},"required":["account_type","display_name","email","first_name","id","last_name","picture_url"]},"AccessSerpy":{"type":"object","properties":{"view":{"type":"boolean"},"edit":{"type":"boolean"},"remove":{"type":"boolean"}},"required":["edit","remove","view"]}}}}
```

***

## What’s Next?

After retrieving a specific scheduled <code class="expression">space.vars.activity</code> via the API, you can:

* Display detailed upcoming work in external applications or calendar views
* Confirm scheduling, ownership, or association details for a specific <code class="expression">space.vars.activity</code>
* Monitor when a scheduled Activity transitions into a logged <code class="expression">space.vars.activity</code>
* Use scheduled <code class="expression">space.vars.activity</code> data in time-based automations or workflows

For more information on scheduled and logged <code class="expression">space.vars.activities</code>, review the related topics below:

<details>

<summary>Related Topics</summary>

* [Scheduling Activities via API](/docs/concepts/activities/activities-api-and-webhooks/schedule-activities-api)
* [Viewing Logged Activity Details](/docs/concepts/activities/activities-api-and-webhooks/view-logged-activity-details-api)
* [Listing Scheduled Activities](/docs/concepts/activities/activities-api-and-webhooks/list-scheduled-activities-api)
* [Triggering External Activity Workflows with Webhooks](/docs/concepts/activities/activities-api-and-webhooks/triggering-external-activity-workflows-with-webhooks)

</details>


# Triggering External Activity Workflows with Webhooks

Use webhooks to trigger external workflows when Activities are completed, enabling event-driven integrations with third-party systems.

{% hint style="success" %}
**Audience:** Developers and Solution Architects

**Purpose:** Explains how to use webhooks to trigger external workflows in response to completed or logged activities.
{% endhint %}

## Overview

Webhooks notify external systems when <code class="expression">space.vars.activities</code> are logged. These notifications allow external systems to react in real time to changes in Kizen. Webhooks are configured per <code class="expression">space.vars.activity</code> Object, not globally. This allows you to control which <code class="expression">space.vars.activities</code> send webhook notifications and where those notifications are delivered.

Webhooks can be used for Activities to:

* Send notifications when an <code class="expression">space.vars.activity</code> is logged.
* Retrieve a full Record with a Logged <code class="expression">space.vars.activity</code> ID.
* Provide necessary context to trigger downstream workflows in external systems

### When to use Webhooks for Activities

Use webhooks when external systems need to respond immediately to work that has occurred in <code class="expression">space.vars.Kizen\_company\_name</code>.

Webhooks are event-driven and designed for near real-time integrations. Typical scenarios include:

* Triggering external workflows when an <code class="expression">space.vars.activity</code> is logged
* Synchronizing <code class="expression">space.vars.activity</code> history with external CRMs
* Sending real-time notifications to messaging or collaboration tools
* Reacting to <code class="expression">space.vars.activity</code> completion without polling the API

{% hint style="info" %}
**Note**: Webhooks only work with logged Activities.
{% endhint %}

### How Webhooks Work with Activities

Webhooks fire when a Logged <code class="expression">space.vars.activity</code> is created.

Each <code class="expression">space.vars.activity</code> Object includes a Default Submission Action, which determines what happens when an <code class="expression">space.vars.activity</code> of that type is submitted. You can configure the <code class="expression">space.vars.activity</code> Object to:

* Redirect the user after logging an <code class="expression">space.vars.activity</code>, or
* Trigger a webhook when the <code class="expression">space.vars.activity</code> is logged

When set to Trigger Webhook, <code class="expression">space.vars.Kizen\_company\_name</code> sends a webhook request to the configured URL every time an Activity of that type is logged.&#x20;

***

## Event Type

<code class="expression">space.vars.Kizen\_company\_name</code> currently supports a single webhook event for an activity:

| Event             | Description                                                                        |
| ----------------- | ---------------------------------------------------------------------------------- |
| `activity.logged` | Fired when a Logged <code class="expression">space.vars.activity</code> is created |

{% hint style="info" %}
**Note:** Webhooks are emitted only for Logged <code class="expression">space.vars.activities</code>. Scheduled <code class="expression">space.vars.activities</code> do not trigger webhooks until they are logged.
{% endhint %}

{% columns %}
{% column %}

### Events that Trigger Webhooks

Webhooks are triggered when a Logged <code class="expression">space.vars.activity</code> is created, including when:

* A user manually creates a Logged <code class="expression">space.vars.activity</code>.
* A Scheduled <code class="expression">space.vars.activity</code> is completed, which then creates a Logged <code class="expression">space.vars.activity</code> in Kizen.
  {% endcolumn %}

{% column %}

### Events that do not Trigger Webhooks

<code class="expression">space.vars.Kizen\_company\_name</code> does **not** currently send webhook notifications for:

* Scheduled <code class="expression">space.vars.activity</code> creation
* Scheduled <code class="expression">space.vars.activity</code> updates
* Scheduled <code class="expression">space.vars.activity</code> edits
* Scheduled or Logged <code class="expression">space.vars.activity</code> deletion
  {% endcolumn %}
  {% endcolumns %}

Additional webhook events for Scheduled or Logged Activities may be added in the future. <code class="expression">space.vars.automation</code> triggers are currently available for Scheduled Activity Overdue events.

***

## About Configuration

Webhooks are configured on the <code class="expression">space.vars.activity</code> Object.

For each <code class="expression">space.vars.activity</code> Object, you can:

* Set the Default Submission Action to `trigger_webhook`
* Define the webhook URL that receives notifications for that <code class="expression">space.vars.activity</code> type
* Subscribe to <code class="expression">space.vars.activity</code> webhook notifications.

<details>

<summary>Subscribing to <code class="expression">space.vars.activity</code> Webhook Notifications</summary>

<code class="expression">space.vars.activity</code> webhooks are configured in the <code class="expression">space.vars.activity</code> Object settings.

<div data-with-frame="true"><figure><img src="/files/ck2pTQ89YK3QZLwZZPh7" alt=""><figcaption></figcaption></figure></div>

#### Enable webhook delivery

1. Open <code class="expression">space.vars.activities</code>.
2. Select the <code class="expression">space.vars.activity</code> you want to configure on the <code class="expression">space.vars.activity</code> Settings page.
3. Locate **Default Submission Action**. Change the value to **Trigger Webhook.**&#x20;
4. Enter your **Webhook URL** where <code class="expression">space.vars.Kizen\_company\_name</code> should send GET requests.
5. When you go back to the <code class="expression">space.vars.activities</code> page, your <code class="expression">space.vars.activity</code> will have webhooks enabled.

</details>

Webhook configuration are configured on the <code class="expression">space.vars.activity</code> Object and applies only to <code class="expression">space.vars.activities</code> logged using that type.

For more details, see:

* [Activity Objects](/docs/concepts/activities/activities-data-model#activity-objects)
* [Activity Permissions](/docs/concepts/activities/activity-permissions)

### Webhook Delivery Behavior

Webhooks are delivered as HTTP requests to the URL configured on the object.

**Delivery details:**

* Method: GET
* Content type: JSON (`application/json`)
* Trigger frequency: One request per logged activity
* Delivery timing: Near real time, but not guaranteed
* Delivery model: Asynchronous

If a webhook delivery fails (for example, the endpoint returns a non-2xx response), a failure notification is generated. Webhook deliveries are not automatically retried.

**Ordering and reliability considerations**\
Webhook notifications are not guaranteed to arrive in strict chronological order and may occasionally be delayed. Your webhook handler should be designed to tolerate:

* Out-of-order delivery
* Delayed delivery

Each webhook should be treated as a signal to fetch the authoritative data from the API rather than relying solely on the payload.

### Webhook Security and Verification

Webhooks do not currently include request signatures or shared secrets. For this reason, webhook notifications should be treated as **event signals only**, not as trusted business data.

Each webhook payload includes an identifier, but consumers must retrieve the full activity details through the API using authenticated requests. This ensures permissions are enforced and that processing only occurs for data the consumer is authorized to access.

Because authoritative data is not delivered in the webhook itself, endpoints only need to perform basic structural validation on incoming requests. Additional verification mechanisms may be introduced in future updates.

### Operational Considerations

Webhooks are delivered using an at-least-once delivery model. Each webhook corresponds to a single Logged <code class="expression">space.vars.activity</code>, but deliveries may occur more than once in certain failure scenarios. Consumers should treat webhook handling as idempotent and de-duplicate events using the `logged_activity_id`.

A webhook delivery is considered successful when the receiving endpoint responds with a **2xx HTTP status code**. Webhook endpoints should respond quickly and defer any long-running processing to background jobs.

Webhook requests may evolve over time as additional fields or event types are introduced. Breaking changes will be versioned or communicated through developer documentation updates. Consumers should avoid relying on undocumented fields.

***

## Viewing Logged Activity Details

Webhooks are delivered as HTTP GET requests. The request includes query parameters that identify the Logged <code class="expression">space.vars.activity</code> so you can retrieve the full record via the <code class="expression">space.vars.activities</code> API. For more information see: [Viewing Logged Activity Details via API](/docs/concepts/activities/activities-api-and-webhooks/view-logged-activity-details-api)

{% hint style="info" %}
Activity field data is not included in webhook payloads. Webhooks provide the logged activity ID only. To retrieve Activity field values—including Activity-specific custom fields—call the Logged Activity endpoint with that ID.
{% endhint %}

***

## Permissions & Data Access

Webhook notifications reference Logged <code class="expression">space.vars.activities</code>, but access to full <code class="expression">space.vars.activity</code> data depends on API permissions.

The <code class="expression">space.vars.activities</code> API enforces user and role-based access controls when retrieving <code class="expression">space.vars.activity</code> records. If the requesting integration lacks permission, the API may return an error. Read [Activity Permissions](/docs/concepts/activities/activity-permissions) for more details.

<details>

<summary>Example Use Case</summary>

Many teams coordinate their work using messaging platforms such as Slack.

When a team member logs an <code class="expression">space.vars.activity</code> like a call, an email, or a follow-up email, the rest of the team often needs to know immediately that the activity happened. Without webhooks, teams would need to refresh the application, poll the API, or wait for updates to be shared manually.

With a webhook integration, <code class="expression">space.vars.Kizen\_company\_name</code> can push a notification the moment an <code class="expression">space.vars.activity</code> is logged so an external system like Slack can retrieve the Logged <code class="expression">space.vars.activity</code> then send a Slack message, update your dashboards, or trigger any follow-up workflows automatically.

### Creating Slack messages when Activities are logged

1. Enable webhook delivery
   * Set the <code class="expression">space.vars.activity</code>'s Default Submission Action to **Trigger Webhook**
   * Enter your Slack-processing endpoint
2. User logs an <code class="expression">space.vars.activity</code>
   * When this occurs, <code class="expression">space.vars.Kizen\_company\_name</code> sends the Logged <code class="expression">space.vars.activity</code> payload to your webhook URL
3. Extract the relevant fields
   * With your service, extract the relevant fields, such as:
     * <code class="expression">space.vars.activity</code> type (`activity_object.api_name`)
     * Logged by (`logged_by.display_name`)
     * Associated Contact (`associated_entities[0].display_name`)
     * Notes (`notes`)
4. Format the Slack message
   * For example, you can write: Alex Rivera logged a Sales Call with Maria Thompson.
5. Post the Slack message

#### Result

Your team gets instant visibility into important interactions, without polling the API or checking the <code class="expression">space.vars.timeline</code> manually.

</details>

***

## What's Next?

Once you understand how webhooks work for Activities, you can:

* Design your webhook endpoint to safely receive and process <code class="expression">space.vars.activity</code> events.
* Implement idempotent handling to prevent duplicate processing.
* Add logging and monitoring to track delivery success and failures.
* Extend your integration by linking <code class="expression">space.vars.activity</code> events to workflows, external systems, or analytics pipelines.

<details>

<summary>Related Topics</summary>

* [Activities](/docs/concepts/activities)
* [Activities Core Concepts](/docs/concepts/activities/activities-core-concepts)
* [Activities Data Model](/docs/concepts/activities/activities-data-model)
* [Activity Permissions](/docs/concepts/activities/activity-permissions)
* [Advanced Activity Rules](/docs/concepts/activities/advanced-activity-rules)
* [Activities API & Webhooks](/docs/concepts/activities/activities-api-and-webhooks)

</details>


# Scheduling Calendar Events for Activities

Create Google and Outlook calendar events from Kizen Activities. Learn setup requirements, scheduling behavior, and limitations.

{% hint style="success" %}
**Audience:** Admins, Developers, Solution Architects

**Purpose:** Explains how users create calendar events for Scheduled <code class="expression">space.vars.activities</code> using the Google or Microsoft Calendar Integration.
{% endhint %}

## Overview

{% hint style="warning" %}
**Caution:** This setup reflects Kizen's default configuration. Your administrator may have customized your layout, so columns or navigation may appear differently. Trial accounts may have limited features.
{% endhint %}

Scheduling calendar events for an <code class="expression">space.vars.activity</code> is useful for future planned work, such as calls, follow-ups, or in the example on this page, deliveries. Scheduled events can be done by admins or employees depending on their permissions, determining who and what gets added to an external calendar.

When a calendar event is created from an <code class="expression">space.vars.activity</code>, <code class="expression">space.vars.Kizen</code> pre-fills key event details and includes a link back to the originating <code class="expression">space.vars.activity</code>. Users review the event created in Google Calendar or Outlook to confirm its accurate.

***

## Before You Begin <a href="#when-to-use-postalytics" id="when-to-use-postalytics"></a>

Before scheduling a calendar event for an <code class="expression">space.vars.activity</code> in <code class="expression">space.vars.Kizen\_company\_name</code>, make sure the following are in place:

* You have access the Calendar Integration from a specified <code class="expression">space.vars.activity</code>.
* The record includes a supported date field with a valid value.
* You are signed into the correct Google or Microsoft account in your browser.

Keep in mind:

* Calendar events are created for a specific <code class="expression">space.vars.activity</code> if you toggle on the integration from the <code class="expression">space.vars.activity</code>'s settings.
* <code class="expression">space.vars.Kizen\_company\_name</code> does not automatically create, update, or sync calendar events.

{% hint style="info" %}
**Note**: The Calendar Integration and Integrated Inbox are completely independent features. The Calendar Integration allows users to create calendar events from date fields in <code class="expression">space.vars.Kizen\_company\_name</code>. Integrated Inbox connects email accounts for sending, receiving, and tracking emails.
{% endhint %}

***

{% stepper %}
{% step %}

#### Open the <code class="expression">space.vars.activities</code> page

Then select the activity for which you want to schedule an event.

<div data-with-frame="true"><figure><img src="/files/km4sg3IEWVcGHwezT2YQ" alt="" width="375"><figcaption></figcaption></figure></div>
{% endstep %}

{% step %}

#### Toggle on Calendar Integration for Activity

On the Activity's settings page, find Calendar Integration and toggle it on.&#x20;

<div data-with-frame="true"><figure><img src="/files/E0oVZa8t3RWTHK33OfpA" alt="" width="563"><figcaption></figcaption></figure></div>
{% endstep %}

{% step %}

#### &#x20;Plan event by filling out Calendar Integration fields

After turning on the toggle, plan even by filling out fields.

* **Event duration (Minutes)**: how long the event is in minutes
* **Attendees**: who's invited to the event (Assignee, Associated Contact)
  * ![](/files/PrKn00uDjF7DOl6UDpeg)
* **Meeting Title**: what the event name is (defaults to the Activity name)
* **Event Description**: any details about the event you'd like to include

<div data-with-frame="true"><figure><img src="/files/rfhvlR4ss7UjaZonP12s" alt="" width="563"><figcaption></figcaption></figure></div>
{% endstep %}

{% step %}

#### Go to Contacts and schedule event

Go into Contacts and select one. Once inside a specific Contact's profile, select **Schedule Activity**.

<figure><img src="/files/iVKIpjO7oCTItptYeSI5" alt="" width="563"><figcaption></figcaption></figure>
{% endstep %}

{% step %}

### Schedule Activity associated with Calendar Integration

Fill out Schedule <code class="expression">space.vars.activity</code> fields.

**Choose Activity**: Select the <code class="expression">space.vars.activity</code> you're scheduling. *Be sure to select Activity that you integrated your calendar with in step 3*

**Assignment Type:** Assign by role or team member (in this example, it's assigned by role)

**Assign Role**: Who is in charge of event; it'll appear on their calendar. In this example, I choose a Delivery person, since the <code class="expression">space.vars.activity</code> is a Delivery Dispatch

You can set additional associations to this scheduled Activity. Select **Schedule**.

<figure><img src="/files/vbynJ4jXetzSFMipHsKJ" alt="" width="563"><figcaption></figcaption></figure>
{% endstep %}

{% step %}

### Confirm scheduled event by viewing in calendar

Go into your calendar (Google or Outlook). You should see:

* Event name in calendar view&#x20;
* The correctly scheduled time and length of event

In Google calendar it should appear like this:

<figure><img src="/files/IToSy46LFoXsn0gHP116" alt="" width="563"><figcaption></figcaption></figure>

And if you click on the event, you should see the person the event was assigned to, along with a link to view the scheduled <code class="expression">space.vars.activity</code> in <code class="expression">space.vars.Kizen\_company\_name</code>.

It should look something like this:

<figure><img src="/files/QLDCfFvzpnurcQfvtiBj" alt="" width="375"><figcaption></figcaption></figure>
{% endstep %}
{% endstepper %}

Your scheduled activity is now in your assigned role's Google or Outlook Calendar.

***

## What's Next

Review the [Google and Outlook Calendar Integration](/docs/integrations-and-plugins/integrations/google-and-outlook-calendar) to understand how the calendar integration works, including authentication behavior and supported use cases.

Or, if you haven't done so, learn how to [enable the Calendar Integration](/docs/integrations-and-plugins/integrations/google-and-outlook-calendar/enable-your-calendar-integration) from the App Marketplace.

<details>

<summary>Related Topics</summary>

* [Enabling the Calendar Intergration](/docs/integrations-and-plugins/integrations/google-and-outlook-calendar/enable-your-calendar-integration)
* [Creating Calendar Events](/docs/integrations-and-plugins/integrations/google-and-outlook-calendar/create-calendar-events-from-contacts)

</details>


# Agentic Workflows

Learn how Kizen Agentic Workflows function, including triggers, steps, executions, and completions, to automate workflows, data updates, and communications across your platform.

{% hint style="success" %}
**Audience:** Administrators, Developers, Solution Architects

**Purpose:** Introduces <code class="expression">space.vars.automations</code> as the execution layer of the <code class="expression">space.vars.Kizen\_company\_name</code> platform, establishes a mental model for how they work, and prepares readers to progress into Core Concepts, Triggers, Execution, and API guidance.
{% endhint %}

## Overview

<code class="expression">space.vars.automations</code> are the mechanism through which <code class="expression">space.vars.Kizen\_company\_name</code> responds to events, processes logic, and takes action, such as connecting data changes, time-based conditions, and external signals to meaningful outcomes without requiring manual intervention each time. They operate asynchronously in the background, executing a configured sequence of steps against a specific <code class="expression">space.vars.entity</code> or globally across the platform.

<code class="expression">space.vars.automations</code> are designed to handle ongoing, event-driven <code class="expression">space.vars.workflows</code>, not to backfill historical data, replace reporting, or substitute for manual data entry and UI configuration. Understanding this distinction upfront helps you design <code class="expression">space.vars.automations</code> with accurate expectations about when and how they run.

### When to Use Agentic Workflows

<code class="expression">space.vars.automations</code> are the right tool when you need <code class="expression">space.vars.Kizen\_company\_name</code> to respond to something and take action automatically. Common use cases include:

* Sending a follow-up communication when a <code class="expression">space.vars.entity</code> reaches a specific stage or a form is submitted
* Assigning ownership, updating fields, or creating related <code class="expression">space.vars.entities</code> based on data changes or incoming webhook signals
* Running a scheduled sequence of actions against a set of <code class="expression">space.vars.entities</code> on a recurring basis
* Coordinating multi-step <code class="expression">space.vars.workflows</code> across <code class="expression">space.vars.objects</code>, such as notifying a team, updating a status, and scheduling an <code class="expression">space.vars.activity</code>, without manual intervention at each step

***

## Agentic Workflows Mastery Checklist

Explore the following topics to understand how <code class="expression">space.vars.automations</code> are configured and used in <code class="expression">space.vars.Kizen\_company\_name</code>.

**Core Knowledge**

* [ ] [What an Agentic Workflow is and how it differs from manual processes and reporting](/docs/concepts/agentic-workflows/agentic-workflow-core-concepts#overview)
* [ ] [How Agentic Workflows fit into Kizen's overall platform as the execution layer](/docs/concepts/agentic-workflows/agentic-workflow-core-concepts#conceptual-model)
* [ ] [The Event → Steps → Execution → Completion mental model and how to apply it to a real workflow](/docs/concepts/agentic-workflows/agentic-workflow-core-concepts#conceptual-model)

**Agentic Workflow Types & Initiation**

* [ ] [The difference between Record-scoped and global Agentic Workflows and when to use each](https://developer.kizen.com/docs/concepts/pages/Dm8CxFar4ucDVW1D6pN5#record-scoped-vs.-global-agentic-workflows)
* [ ] [How to start an Agentic Workflow manually, from a record, in bulk, or from another Agentic Workflows](/docs/concepts/agentic-workflows/starting-agentic-workflows)

**Triggers**

* [ ] [How triggers define when and why an Agentic Workflow starts](/docs/concepts/agentic-workflows/agentic-workflow-triggers)
* [ ] [The difference between action-based, scheduled, and webhook triggers](/docs/concepts/agentic-workflows/agentic-workflow-triggers#trigger-types)
* [ ] [How trigger timing, throttling, and async evaluation affect when an Agentic Workflow runs](https://developer.kizen.com/docs/concepts/pages/hm9BhjBAp16Wpn4tGO2I#trigger-event-time-vs.-evaluation-time)

**Conditions, Goals & Variables**

* [ ] [How condition steps evaluate logic and route execution down a yes or no path](/docs/concepts/agentic-workflows/agentic-workflow-conditions#what-are-conditions)
* [ ] How goals differ from conditions and delays, and when to use them — see Agentic Workflow Goals **(Topic Coming Soon)**
* [ ] How variables are defined, evaluated, and used across steps — see Agentic Workflow Variables **(Topic Coming Soon)**

**Actions**

* [ ] [The full range of available action step types and how each behaves](/docs/concepts/agentic-workflows/agentic-workflow-actions#types-of-agentic-workflows-actions)
* [ ] [How action types vary by Agentic Workflow context and Object type](/docs/concepts/agentic-workflows/agentic-workflow-actions#system-behavior-of-agentic-workflow-actions)

**Execution & Processing**

* [ ] [What it means for Agentic Workflows to execute asynchronously and what that implies for data consistency](/docs/concepts/agentic-workflows/agentic-workflow-execution-and-process-model#asynchronous-processing-model)
* [ ] [How execution state, step history, and traceability work](/docs/concepts/agentic-workflows/agentic-workflow-execution-and-process-model#save-and-activation-behavior)
* [ ] [How delays interact with execution state and time-based behavior](/docs/concepts/agentic-workflows/agentic-workflow-delays-and-time-based-behavior)
* [ ] [How execution statuses, step statuses, and system indicators are represented and interpreted](/docs/concepts/agentic-workflows/agentic-workflow-execution-and-process-model#execution-lifecycle)

**Data Model**

* [ ] How Agentic Workflows, executions, and step history are structured and persisted — see Agentic Workflow Data Model **(Topic Coming Soon)**
* [ ] How the data model maps to APIs and webhooks — see Agentic Workflow Data Model **(Topic Coming Soon)**

**Code Steps**

* [ ] [How code steps execute within an Agentic Workflow and interact with variables and execution context](/docs/concepts/agentic-workflows/automation-code-steps)
* [ ] Available Python runtimes, execution limits, and pre-installed libraries — see Code Step Runtimes, Limits, and Libraries **(Topic Coming Soon)**
* [ ] How Kizen field values are encoded when passed into and out of code steps — see Kizen Data Types and Data Encoding **(Topic Coming Soon)**
* [ ] Best practices for writing reliable, maintainable, and debuggable code steps — see Code Step Best Practices **(Topic Coming Soon)**

**AI Agent Steps**

* [ ] [How Call LLM, File Extraction, and Audio Transcription steps work and when to use each](/docs/concepts/agentic-workflows/agentic-workflow-ai-agents)
* [ ] How to configure confidence thresholds, handle errors, and validate outputs from AI-driven steps — see LLM/AI Action Steps **(Topic Coming Soon)**
* [ ] When to use a code step instead of an LLM step for deterministic logic — see Code Step Best Practices **(Topic Coming Soon)**

**Safeguards & Runtime Controls**

* [ ] How throttling works and what it means for execution timing — see Agentic Workflow Safeguards & Runtime Controls **(Topic Coming Soon)**
* [ ] How infinite loop prevention works for Go To Step loops and cross-Agentic Workflow interactions — see Agentic Workflow Safeguards & Runtime Controls **(Topic Coming Soon)**
* [ ] How the execution kill switch protects against runaway Agentic Workflows — see Agentic Workflow Safeguards & Runtime Controls **(Topic Coming Soon)**

**Permissions**

* [ ] How permissions interact with Agentic Workflows at design time and runtime — see Agentic Workflow Permissions **(Topic Coming Soon)**
* [ ] Why runtime execution bypasses standard record permissions and what that means in practice — see Agentic Workflow Permissions **(Topic Coming Soon)**

**APIs & Webhooks**

* [ ] How to trigger and control Agentic Workflows programmatically via the API — see Agentic Workflow APIs Overview **(Coming Soon)**
* [ ] How to start, pause, resume, and cancel executions via API — see Start Agentic Workflow on Record, Resume Paused Execution, Pause Execution, and Cancel Execution **(Topic Coming Soon)**
* [ ] How webhook triggers work and how to configure POST and GET webhook-based Agentic Workflows — see Webhook Trigger (POST) and Webhook Trigger (GET) **(Topic Coming Soon)**

**Design Best Practices**

* [ ] How to design Agentic Workflows that are linear, observable, and maintainable — see Agentic Workflow Design Best Practices **(Topic Coming Soon)**
* [ ] When to combine steps, reduce branching, and avoid cross-Agentic Workflow entanglement — see Agentic Workflow Design Best Practices **(Topic Coming Soon)**
* [ ] How to plan Agentic Workflows for scale and observability — see Agentic Workflow Design Best Practices **(Topic Coming Soon)**

***

## What's Next

Continue to [Agentic Workflow Core Concepts](/docs/concepts/agentic-workflows/agentic-workflow-core-concepts) to build the foundational understanding you need before configuring <code class="expression">space.vars.automations</code>, designing execution strategies, or working with the API.&#x20;

<details>

<summary>Related Topics</summary>

* [Agentic Workflow Core Concepts](/docs/concepts/agentic-workflows/agentic-workflow-core-concepts)
* [Agentic Workflow Code Steps](/docs/concepts/agentic-workflows/automation-code-steps)

</details>


# Agentic Workflow Core Concepts

Learn the foundational terminology, conceptual model, and system-level principles that govern how Kizen Agentic Workflow function.

{% hint style="success" %}
**Audience:** Admins, Developers, and Solution Architects

**Purpose:** Explains the foundational architecture of <code class="expression">space.vars.automations</code> in <code class="expression">space.vars.Kizen\_company\_name</code>, including how executions are structured, how context and scope work, and the system-level behaviors that govern how <code class="expression">space.vars.automations</code> run.
{% endhint %}

## Overview

<code class="expression">space.vars.automations</code> are the platform's engine for responding to events, executing logic, and producing outcomes without manual intervention. They listen for a triggering event, evaluate whether execution should begin, and then process a series of steps against a <code class="expression">space.vars.entity</code> or globally across the platform.

Before configuring triggers, designing execution logic, or working with the <code class="expression">space.vars.automations</code> API, it helps to have a clear mental model of how <code class="expression">space.vars.automations</code> are structured and how they behave. The concepts on this page apply universally, regardless of the trigger type, step configuration, or use case you are working with.

***

## Foundational Definitions

| Term                  | Definition                                                                                                                                                                                                                                                                                                                                                                                                      |
| --------------------- | --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| **Agentic Workflow**  | A configured workflow that listens for a triggering event and executes a series of steps against a <code class="expression">space.vars.entity</code> or globally across <code class="expression">space.vars.Kizen\_company\_name</code>.                                                                                                                                                                        |
| **Event**             | A condition or occurrence that causes an <code class="expression">space.vars.automation</code> to begin evaluating whether it should start a new execution. Events may be user-initiated, data-driven, time-based, or externally triggered.                                                                                                                                                                     |
| **Execution**         | A single run of an <code class="expression">space.vars.automation</code>. Each execution is independent, maintains its own state, and progresses through the <code class="expression">space.vars.automation</code>'s steps sequentially.                                                                                                                                                                        |
| **Record Context**    | The mode in which an <code class="expression">space.vars.automation</code> operates against a specific <code class="expression">space.vars.entity</code>. Most <code class="expression">space.vars.automations</code> run in <code class="expression">space.vars.entity</code> context, meaning all step actions are scoped to a single <code class="expression">space.vars.entity</code> and its related data. |
| **Global Context**    | The mode in which an <code class="expression">space.vars.automation</code> operates without being scoped to a specific <code class="expression">space.vars.entity</code>. Global <code class="expression">space.vars.automations</code> are used for platform-wide logic that is not tied to a single entity.                                                                                                   |
| **Execution Context** | The runtime environment of a single execution, including the <code class="expression">space.vars.entity</code> it is operating on (if applicable), the current variable state, and the step being processed at any given moment.                                                                                                                                                                                |

***

## Conceptual Model

Every <code class="expression">space.vars.automation</code> in <code class="expression">space.vars.Kizen\_company\_name</code> — regardless of its trigger type, step count, or complexity — follows the same four-stage flow: an event fires, an execution is created, steps are processed in sequence, and the execution reaches a terminal state.

<div data-with-frame="true"><figure><img src="/files/XFAKcJcm7sdOMr3vW7dk" alt="" width="563"><figcaption></figcaption></figure></div>

* **An event fires:** Something happens that the <code class="expression">space.vars.automation</code> is configured to listen for like a field being updated, a form is submitted, a scheduled time arrives, or a user initiates a manual start. At this point, the <code class="expression">space.vars.automation</code> evaluates whether a new execution should begin.
* **An execution is created:** If the trigger conditions are met, <code class="expression">space.vars.Kizen\_company\_name</code> creates a new execution and places it in the processing queue. Because <code class="expression">space.vars.automations</code> are asynchronous, execution does not begin instantaneously, there is a short delay between when the event fires and when the first step begins processing. This is by design.
* **Steps are processed in sequence:** The execution works through each step in the order it is configured. Each step runs in its own transaction. Conditions branch the execution down different paths, actions perform operations, delays introduce pauses, and goals wait for conditions to be met before proceeding.
* **The execution reaches a terminal state:** When there are no more steps to process, or when a stopping condition is reached, the execution resolves. The terminal states an execution can reach are **Completed**, **Canceled**, and **Failed**.

This four-stage model is the foundation for everything else in the <code class="expression">space.vars.automations</code> documentation set. Understanding it will help you interpret execution history, design reliable logic, and troubleshoot unexpected behavior.

### Record-Scoped vs. Global Agentic Workflows

Most <code class="expression">space.vars.automations</code> in <code class="expression">space.vars.Kizen\_company\_name</code> are **Record-scoped**. This means the execution operates in the context of a single <code class="expression">space.vars.entity</code> (a <code class="expression">space.vars.contact</code>, a <code class="expression">space.vars.workflow</code>, or another Custom <code class="expression">space.vars.object</code>) and every step within that execution acts on that <code class="expression">space.vars.entity</code> and its related data.

**Global Agentic Worflows** are a distinct configuration. They operate without a <code class="expression">space.vars.entity</code> context, making them suitable for platform-wide logic that is not tied to a single <code class="expression">space.vars.entity</code>, such as running a recurring job or performing cross-object operations. Because Global <code class="expression">space.vars.automations</code> have no inherent record context, the set of available triggers and actions is more limited than in record-scoped <code class="expression">space.vars.automations</code>.

The distinction between <code class="expression">space.vars.entity</code>-scoped and global <code class="expression">space.vars.automations</code> affects what data is accessible at runtime, which triggers and actions are available, and how variables resolve during execution.

#### Key Differences

| Aspect                                                                          | Record-Scoped                                 | Global                                  |
| ------------------------------------------------------------------------------- | --------------------------------------------- | --------------------------------------- |
| Operates against a specific <code class="expression">space.vars.entity</code>   | Yes                                           | No                                      |
| Available triggers                                                              | Full set                                      | Limited                                 |
| Available actions                                                               | Full set                                      | Limited                                 |
| Supports <code class="expression">space.vars.entity</code> variables            | Yes                                           | Yes (assigned manually)                 |
| Supports <code class="expression">space.vars.workflow</code> and stage triggers | Yes                                           | No                                      |
| Common use                                                                      | Field updates, notifications, lifecycle logic | Scheduled jobs, cross-object operations |

### High-Level Components

The following table introduces the core components of an <code class="expression">space.vars.automation</code>. Each component is covered in depth in its own dedicated topic; this table is intended to orient you to what each component is and why it exists, not to serve as a complete reference.

| Component                                                                                      | What It Is                                                                                            | How It Works                                                                                                                                                                                                                          | Why Use It                                                                                                                                                                                                           |
| ---------------------------------------------------------------------------------------------- | ----------------------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| [**Trigger**](/docs/concepts/agentic-workflows/agentic-workflow-triggers)                      | The condition or event that causes an <code class="expression">space.vars.automation</code> to start. | Listens for a specific occurrence — such as a field update, a scheduled time, a form submission, or a webhook — and initiates a new execution when the condition is met.                                                              | To define precisely when an <code class="expression">space.vars.automation</code> should respond.                                                                                                                    |
| [**Step**](/docs/concepts/agentic-workflows/automation-code-steps)                             | An individual unit of work within an <code class="expression">space.vars.automation</code>.           | Steps execute sequentially, and each runs in its own transaction.                                                                                                                                                                     | To define the discrete actions, decisions, or waits that make up the <code class="expression">space.vars.automation</code>'s logic.                                                                                  |
| [**Condition**](/docs/concepts/agentic-workflows/agentic-workflow-conditions)                  | A branching step that evaluates one or more criteria and routes execution based on the result.        | Evaluates the criteria against the execution context and directs execution down a yes path or a no path.                                                                                                                              | To introduce logic and decision points into an <code class="expression">space.vars.automation</code>'s flow.                                                                                                         |
| [**Action**](/docs/concepts/agentic-workflows/agentic-workflow-triggers/action-based-triggers) | A step that performs an operation.                                                                    | Executes an operation — such as updating a field, sending a notification, creating a <code class="expression">space.vars.entity</code>, or calling an external system — against the execution context.                                | To produce the outcomes the <code class="expression">space.vars.automation</code> is designed to achieve.                                                                                                            |
| [**Delay**](/docs/concepts/agentic-workflows/agentic-workflow-delays-and-time-based-behavior)  | A step that pauses execution for a defined period of time before proceeding.                          | Holds the execution for a static or variable-based duration, then releases it to the next step.                                                                                                                                       | To introduce timing into <code class="expression">space.vars.automation</code> logic, such as waiting before sending a follow-up.                                                                                    |
| [**Goal**](/docs/concepts/agentic-workflows/agentic-workflow-goals)                            | A step that pauses execution and waits for a specified condition to be met.                           | Monitors the execution's <code class="expression">space.vars.entity</code> for the defined condition. If the condition is met, execution proceeds down the success path. If a timeout occurs, execution proceeds down the unmet path. | To build conditional waiting behavior into <code class="expression">space.vars.workflows</code>, such as pausing a drip sequence until a <code class="expression">space.vars.contact</code> takes a specific action. |
| [**Variables**](/docs/concepts/agentic-workflows/agentic-workflow-variables)                   | Named values that are evaluated and stored within the scope of a single execution.                    | Variables draw from <code class="expression">space.vars.entity</code> fields, trigger outputs, and other sources. They are evaluated in order and the first successful source sets the value.                                         | To pass data between steps, drive conditional logic, and make <code class="expression">space.vars.automation</code> behavior dynamic.                                                                                |

***

## System Behaviors

These principles inform how <code class="expression">space.vars.automations</code> should be designed and how their behavior should be interpreted.

| Principle                                 | What it means                                                                                                                                                                   | What it means for you                                                                                                                                            |
| ----------------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | ---------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| **Asynchronous by design**                | <code class="expression">space.vars.automations</code> are queued and processed after an event fires, not in real time.                                                         | Don't rely on <code class="expression">space.vars.automations</code> for instant outcomes. Expect a short delay between an event and the start of execution.     |
| **Fully traceable**                       | Every execution and every step within it is logged automatically.                                                                                                               | Use execution history as your first tool when verifying outcomes or troubleshooting unexpected behavior.                                                         |
| **Atomic save behavior**                  | There is no versioning. Saving a change takes effect immediately, including for in-progress executions.                                                                         | Save changes to active <code class="expression">space.vars.automations</code> carefully. In-flight executions reflect your update the moment it is saved.        |
| **Step processing is atomic**             | Each step runs in its own transaction. A failed step does not roll back prior steps.                                                                                            | Partial execution is possible. Always verify step-level outcomes in execution history.                                                                           |
| **Order is guaranteed only linearly**     | Steps follow configured order on a linear path, but order is not guaranteed across parallel branches or simultaneous executions.                                                | If strict ordering matters, keep your logic linear.                                                                                                              |
| **Permissions do not apply at runtime**   | <code class="expression">space.vars.automations</code> run with elevated access, bypassing the permissions of the user who configured or triggered them.                        | Be deliberate when <code class="expression">space.vars.automations</code> modify sensitive data. Standard permission checks do not apply during execution.       |
| **Completed ≠ successful**                | A Completed status means execution finished, not that every step produced the intended result.                                                                                  | Always review execution history to confirm outcomes.                                                                                                             |
| **Steps should be retryable**             | The system may retry a failed step under certain conditions.                                                                                                                    | Where possible, design steps so running them more than once does not produce harmful side effects.                                                               |
| **Agentic Workflows are not retroactive** | Activating an <code class="expression">space.vars.automation</code> does not process <code class="expression">space.vars.entity</code>s that already met the trigger condition. | To process pre-existing <code class="expression">space.vars.entity</code>s, use a manual or bulk start after activation.                                         |
| **Triggers only listen while active**     | Deactivating an <code class="expression">space.vars.automation</code> stops trigger listening entirely. Events during inactivity are not captured or backfilled.                | There is no backlog catchup on reactivation. The <code class="expression">space.vars.automation</code> begins listening from the moment it becomes active again. |

***

## Key Use Cases

<code class="expression">space.vars.automations</code> support the following industry use cases:

### Industry Examples

{% tabs %}
{% tab title="Insurance" %} <code class="expression">space.vars.automations</code> provide the operational backbone for insurance workflows by responding to data changes, triggering follow-up actions, and managing lifecycle transitions across policies, applications, and member <code class="expression">space.vars.entities</code>.

**Examples include:**

* Triggering a renewal workflow when a policy's expiration date is within 60 days, using an On or Around Date trigger scoped to a Policy Object
* Starting an onboarding sequence when an application moves to an Approved stage, using a Stage Updated trigger
* Sending an automated follow-up to an agent when a submitted application has not been reviewed within 48 hours, using a Delay step followed by a conditional notification action
* Using a webhook-triggered <code class="expression">space.vars.automation</code> to receive inbound data from an external policy administration system and update the corresponding <code class="expression">space.vars.entity</code> in <code class="expression">space.vars.Kizen\_company\_name</code>

**How Agentic Workflows help:**

* Reduce manual handoffs across underwriting, servicing, and compliance workflows
* Enforce consistent follow-up cadences without relying on individual team members
* Respond to external system events in real time through webhook-based triggers
* Maintain audit trails through full execution history and step-level logging
  {% endtab %}

{% tab title="Healthcare" %} <code class="expression">space.vars.automations</code> enable healthcare teams to respond to clinical and administrative events, coordinate care transitions, and maintain consistent engagement across patient and referral <code class="expression">space.vars.entities</code>.

**Examples include:**

* Triggering a care pathway <code class="expression">space.vars.automation</code> when a referral <code class="expression">space.vars.entity</code> moves to an Accepted stage, automatically creating intake tasks and assigning them to the appropriate care coordinator
* Sending appointment reminders to patients using a scheduled <code class="expression">space.vars.automation</code> scoped to an Appointments Object, triggered by an On or Around Date condition relative to the scheduled visit date
* Using a Goal step to pause a follow-up sequence until a patient completes a required intake form, then routing execution based on whether the goal was met or timed out
* Triggering a notification to a supervisor when a high-priority case has not advanced stages within a defined window

**How Automations help:**

* Eliminate manual coordination steps between intake, scheduling, and care delivery
* Maintain consistent outreach cadences across large patient populations
* Surface exceptions and delays before they affect care outcomes
* Support compliance and documentation requirements through traceable execution history
  {% endtab %}

{% tab title="Finance" %} <code class="expression">space.vars.automations</code> help financial services teams manage client lifecycle events, enforce operational processes, and respond to data changes across client, account, and opportunity records.

**Examples include:**

* Starting an onboarding <code class="expression">space.vars.automation</code> when an Opportunity record moves to a Closed Won stage, triggering document requests, task assignments, and welcome communications
* Using a scheduled global <code class="expression">space.vars.automation</code> to run a daily review of accounts with upcoming review dates and create follow-up tasks for assigned advisors
* Triggering a compliance notification when a required field on a Client Profile record is left blank for more than a defined period, using a Field Updated trigger with a Delay step
* Using a webhook-triggered <code class="expression">space.vars.automation</code> to receive portfolio data from an external custodial platform and update account records in <code class="expression">space.vars.Kizen\_company\_name</code>

**How Automations help:**

* Enforce consistent onboarding and servicing processes across advisors and teams
* Reduce operational risk by automating compliance-adjacent reminders and checks
* Maintain a complete audit trail of automated actions across client and account records
* Respond to external data events through webhook integration without manual intervention
  {% endtab %}
  {% endtabs %}

***

## What's Next

With a shared vocabulary and a clear mental model in place, the next step is understanding how <code class="expression">space.vars.automations</code> are initiated. The [Starting Agentic Workflows](/docs/concepts/agentic-workflows/starting-agentic-workflows) topic covers every supported method for starting an <code class="expression">space.vars.automation</code> — from manual triggers and bulk starts to scheduled runs, event-based triggers, and webhook-driven initiation — and explains the key behaviors and configuration considerations for each.

<details>

<summary>Related Topics</summary>

* [Agentic Workflows](/docs/concepts/agentic-workflows)
* [Starting Agentic Workflows](/docs/concepts/agentic-workflows/starting-agentic-workflows)
* [Agentic Workflow Triggers](/docs/concepts/agentic-workflows/agentic-workflow-triggers)
* [Agentic Workflow Actions](/docs/concepts/agentic-workflows/agentic-workflow-actions)

</details>


# Agentic Workflow Triggers

Learn how Kizen Agentic Workflow triggers work, including trigger types, asynchronous evaluation, throttling behavior, and timing variables for Contacts, workflows, and more.

{% hint style="success" %}
**Audience:** Administrators, Solution Architects, and Developers

**Purpose:** Documents all supported trigger types in <code class="expression">space.vars.Kizen\_company\_name</code>, explains how each one evaluates and fires, and covers the timing and throttling behaviors that govern when <code class="expression">space.vars.automations</code> are initiated.
{% endhint %}

## Overview

Triggers are the mechanism by which <code class="expression">space.vars.automations</code> listen for and respond to events. When a trigger condition is met, <code class="expression">space.vars.Kizen\_company\_name</code> initiates a new execution of the <code class="expression">space.vars.automation</code> and begins processing its configured steps.

***

## Trigger Foundations

The following ground rules apply to all <code class="expression">space.vars.automations</code>, regardless of trigger type.

* **Every Agentic Workflow includes a manual trigger:** A manual trigger is automatically added to every <code class="expression">space.vars.automation</code> at creation. It provides an always-available on-demand initiation method that allows authorized users to start the <code class="expression">space.vars.automation</code> against a <code class="expression">space.vars.entity</code> at any time. The manual trigger coexists alongside any other configured triggers and does not need to be added separately.
* **Available trigger types depend on Agentic Workflow context:** The set of supported triggers differs across Contact <code class="expression">space.vars.automations</code>, Workflow <code class="expression">space.vars.automations</code>, Global <code class="expression">space.vars.automations</code>, and <code class="expression">space.vars.object</code> <code class="expression">space.vars.automations</code>. Not every trigger type is available in every context. Context-specific triggers are called out explicitly in each section below.
* **There is no indicator for duplicate triggers:** <code class="expression">space.vars.Kizen\_company\_name</code> does not display a warning if the same trigger type is configured more than once on an <code class="expression">space.vars.automation</code>. Duplicate triggers can cause a <code class="expression">space.vars.entity</code> to enter the <code class="expression">space.vars.automation</code> multiple times from a single event. You are responsible for identifying and removing duplicate trigger configurations.
* **Trigger order is not guaranteed:** When multiple triggers are configured on an <code class="expression">space.vars.automation</code>, the order in which they fire relative to one another is not guaranteed. <code class="expression">space.vars.automation</code> logic that depends on one trigger firing before another cannot rely on ordering.

***

## Trigger Types

<code class="expression">space.vars.Kizen\_company\_name</code> <code class="expression">space.vars.automations</code> support three categories of triggers. Each category covers a distinct class of initiation event.

| Trigger                                                                                                                                                   | Category     | Description                                                                                                                                                      | Available On                                                                                                                                                  | Agentic Workflow Scope                                    |
| --------------------------------------------------------------------------------------------------------------------------------------------------------- | ------------ | ---------------------------------------------------------------------------------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------- | --------------------------------------------------------- |
| [Activity Logged](https://developer.kizen.com/docs/concepts/agentic-workflows/agentic-workflow-triggers/action-based-triggers#activity-logged)            | Action-based | Fires when a specific activity type is logged on a <code class="expression">space.vars.entity</code>.                                                            | <code class="expression">space.vars.objects</code>, <code class="expression">space.vars.workflows</code>, <code class="expression">space.vars.contacts</code> | <code class="expression">space.vars.entity</code>, Global |
| [Activity Past Due](https://developer.kizen.com/docs/concepts/agentic-workflows/agentic-workflow-triggers/scheduled-triggers#activity-past-due)           | Scheduled    | Fires when a scheduled activity's due date passes without the activity being completed.                                                                          | <code class="expression">space.vars.objects</code>, <code class="expression">space.vars.workflows</code>, <code class="expression">space.vars.contacts</code> | <code class="expression">space.vars.entity</code>, Global |
| [New Record Created](https://developer.kizen.com/docs/concepts/agentic-workflows/agentic-workflow-triggers/action-based-triggers#new-record-created)      | Action-based | Fires when a new <code class="expression">space.vars.entity</code> is created for the associated <code class="expression">space.vars.object</code>.              | <code class="expression">space.vars.objects</code>, <code class="expression">space.vars.workflows</code>, <code class="expression">space.vars.contacts</code> | <code class="expression">space.vars.entity</code>         |
| [Field Updated](https://developer.kizen.com/docs/concepts/agentic-workflows/agentic-workflow-triggers/action-based-triggers#field-updated)                | Action-based | Fires when a specified field's value changes on a <code class="expression">space.vars.entity</code>. Supports from/to value configuration and blank transitions. | <code class="expression">space.vars.objects</code>, <code class="expression">space.vars.workflows</code>, <code class="expression">space.vars.contacts</code> | <code class="expression">space.vars.entity</code>         |
| [On or Around Date](https://developer.kizen.com/docs/concepts/agentic-workflows/agentic-workflow-triggers/scheduled-triggers#on-or-around-date)           | Scheduled    | Fires based on a date field value on a <code class="expression">space.vars.entity</code>, scheduling future executions relative to that date.                    | <code class="expression">space.vars.objects</code>, <code class="expression">space.vars.workflows</code>, <code class="expression">space.vars.contacts</code> | <code class="expression">space.vars.entity</code>         |
| [Stage Updated](https://developer.kizen.com/docs/concepts/agentic-workflows/agentic-workflow-triggers/action-based-triggers#stage-updated)                | Action-based | Fires when a <code class="expression">space.vars.entity</code> moves from one <code class="expression">space.vars.workflow</code> stage to another.              | <code class="expression">space.vars.workflows</code> only                                                                                                     | <code class="expression">space.vars.entity</code>         |
| [Form Submitted](https://developer.kizen.com/docs/concepts/agentic-workflows/agentic-workflow-triggers/action-based-triggers#form-submitted)              | Action-based | Fires when a form associated with the <code class="expression">space.vars.entity</code> is submitted.                                                            | <code class="expression">space.vars.entity</code>-based <code class="expression">space.vars.automations</code> only                                           | <code class="expression">space.vars.entity</code>         |
| [Survey Submitted](https://developer.kizen.com/docs/concepts/agentic-workflows/agentic-workflow-triggers/action-based-triggers#survey-submitted)          | Action-based | Fires when a survey associated with the <code class="expression">space.vars.entity</code> is submitted.                                                          | <code class="expression">space.vars.entity</code>-based <code class="expression">space.vars.automations</code> only                                           | <code class="expression">space.vars.entity</code>         |
| [Webhook Received](https://developer.kizen.com/docs/concepts/agentic-workflows/agentic-workflow-triggers/webhook-triggers)                                | Webhook      | Fires when an inbound HTTP request is received from an external system. Supports JSON payload and URL query parameter extraction.                                | <code class="expression">space.vars.objects</code>, <code class="expression">space.vars.workflows</code>, <code class="expression">space.vars.contacts</code> | <code class="expression">space.vars.entity</code>, Global |
| [Email Received from Contact](https://developer.kizen.com/docs/concepts/agentic-workflows/agentic-workflow-triggers/action-based-triggers#email-received) | Action-based | Fires when an email is received from a contact.                                                                                                                  | <code class="expression">space.vars.contacts</code> only                                                                                                      | <code class="expression">space.vars.entity</code>         |
| [Tag Added / Removed](https://developer.kizen.com/docs/concepts/agentic-workflows/agentic-workflow-triggers/action-based-triggers#tag-added-tag-removed)  | Action-based | Fires when a specific tag is added to or removed from a <code class="expression">space.vars.entity</code>.                                                       | <code class="expression">space.vars.contacts</code> only                                                                                                      | <code class="expression">space.vars.entity</code>         |
| [Scheduled](https://developer.kizen.com/docs/concepts/agentic-workflows/agentic-workflow-triggers/scheduled-triggers#scheduled)                           | Scheduled    | Fires on a user-configured recurring schedule. Runs independently of any specific <code class="expression">space.vars.entity</code>.                             | Global only                                                                                                                                                   | Global                                                    |

## Trigger Timing & Throttling

Understanding when a trigger evaluates and how throttling affects that evaluation is essential for designing <code class="expression">space.vars.automations</code> that behave predictably. These behaviors apply to all trigger types.

#### Asynchronous Queue Evaluation

Triggers do not evaluate synchronously at the moment an event occurs. When a trigger condition is met, the event is queued and evaluated asynchronously. There may be a delay between when an event fires and when the <code class="expression">space.vars.automation</code> begins processing. This delay is normal and expected and is not an indication that a trigger failed or was missed.

#### Trigger Event Time vs. Evaluation Time

Two distinct timestamps are associated with every trigger: the time the event occurred, and the time the trigger was evaluated from the queue. These may differ, particularly under high load or when queue processing is delayed. Both values are recorded and accessible within the <code class="expression">space.vars.automation</code>.

#### Throttling (Quiet Time Window)

Throttling functions as a quiet time or mute window, not as a mechanism for spacing out or delaying executions. You set up throttling at the level of the <code class="expression">space.vars.automation</code>, and your configuration applies to each of its triggers. When any trigger on the <code class="expression">space.vars.workflow</code> fires for a <code class="expression">space.vars.entity</code>, <code class="expression">space.vars.Kizen\_company\_name</code> suppresses further trigger evaluations for that same <code class="expression">space.vars.entity</code> from any of the <code class="expression">space.vars.workflow</code>'s triggers for a specified time and discards events that occur during that time so that they don't queue up to fire later.

Please note also:

* Throttling prevents additional executions from being initiated within the time window.
* Throttling does not delay or redistribute executions.
* Events suppressed by throttling are not recovered after the time window closes.
* For webhooks, a request's body and URL are checked for similarity against those of other requests that target the same <code class="expression">space.vars.entity</code> and <code class="expression">space.vars.automation</code> pair. Requests determined to be similar are throttled, so distinct requests against that same pair are preserved. For more information about webhooks, see the [SmartConnector](/docs/concepts/smartconnectors) documentation.

#### Activity Triggers Are Excluded from Throttling

<code class="expression">space.vars.activity</code>-based triggers (such as, <code class="expression">space.vars.activity</code> Logged and <code class="expression">space.vars.activity</code> Past Due) are not subject to throttling. Each logged <code class="expression">space.vars.activity</code> is treated as a distinct event, so every activity submission starts its own execution, even when submissions occur close together within a throttle window.

This exclusion is one-directional. An <code class="expression">space.vars.activity</code> trigger still marks the <code class="expression">space.vars.automation</code> as started, so a following Field Updated trigger for the same <code class="expression">space.vars.entity</code> within the window is throttled. A following <code class="expression">space.vars.activity</code> trigger is not.

{% hint style="warning" %}
Avoid combining a Field Updated trigger and an <code class="expression">space.vars.activity</code> Logged trigger that respond to the same event on a single <code class="expression">space.vars.automation</code>. Because trigger order isn't guaranteed, the result depends on which fires first: If the <code class="expression">space.vars.activity</code> trigger fires first, the subsequent field update is throttled. If the field update fires first, the <code class="expression">space.vars.activity</code> trigger still fires because it's exempt. This can make the <code class="expression">space.vars.automation</code> behave differently from one run to the next.
{% endhint %}

#### Trigger Timestamp Variable Source

The timestamp of the trigger event is available as a variable source within the <code class="expression">space.vars.automation</code>, captured at the time the execution is created. This value is useful when steps need to reference when the triggering event occurred. For example, logging when a webhook was received or calculating a deadline relative to when a field was updated.

***

## What's Next?

Continue to [Action-Based Triggers](/docs/concepts/agentic-workflows/agentic-workflow-triggers/action-based-triggers) to understand what happens after an <code class="expression">space.vars.automation</code> is initiated: how executions are created, how steps are processed sequentially and atomically, how the asynchronous model affects data consistency, and how execution state is tracked and managed.

Reviewing the [Agentic Workflow Execution & Processing Model](/docs/concepts/agentic-workflows/agentic-workflow-execution-and-process-model) in sequence with this page is recommended if you are designing <code class="expression">space.vars.automations</code> where execution timing, step ordering, or data consistency are important.

<details>

<summary>Related Topics</summary>

* [Starting Agentic Workflows](/docs/concepts/agentic-workflows/starting-agentic-workflows)
* [Action-Based Triggers](/docs/concepts/agentic-workflows/agentic-workflow-triggers/action-based-triggers)
* [Scheduled Triggers ](/docs/concepts/agentic-workflows/agentic-workflow-triggers/scheduled-triggers)
* [Webhook Triggers](/docs/concepts/agentic-workflows/agentic-workflow-triggers/webhook-triggers)

</details>


# Action-Based Triggers

Learn how action-based triggers work in Kizen, including field updates, stage changes, form submissions, tag events, and when each trigger fires on a Record.

{% hint style="success" %}
**Audience:** Administrators, Solution Architects, and Developers

**Purpose:** Documents each action-based trigger type in <code class="expression">space.vars.Kizen\_company\_name</code>: what it does, when it fires, and the behavioral details that affect how <code class="expression">space.vars.automations</code> respond to <code class="expression">space.vars.entity</code> changes and user actions.
{% endhint %}

## Overview

Action-based triggers fire in response to a data change or user action on a <code class="expression">space.vars.entity</code>. When the specified event occurs, <code class="expression">space.vars.Kizen\_company\_name</code> queues a trigger evaluation. If the trigger conditions are satisfied it then initiates a new <code class="expression">space.vars.automation</code> execution.

### Activity Logged

This trigger fires when an <code class="expression">space.vars.activity</code> of a selected type is logged on a <code class="expression">space.vars.entity</code>.&#x20;

<div data-with-frame="true"><figure><img src="/files/q1qyvJZF8Po8npxiUcFh" alt="" width="252"><figcaption></figcaption></figure></div>

Each trigger configuration listens for a single <code class="expression">space.vars.activity</code> type. To respond to multiple <code class="expression">space.vars.activity</code> types on the same <code class="expression">space.vars.automation</code>, configure a separate trigger for each.

{% hint style="info" %}
**Note**: Scheduling a future <code class="expression">space.vars.activity</code> task does not fire this trigger. It evaluates only at the moment an <code class="expression">space.vars.activity</code> is marked as completed and logged.
{% endhint %}

### New Record Created

Fires when a new <code class="expression">space.vars.entity</code> is created. Can be configured to fire on creation, unarchive, or both.

<div data-with-frame="true"><figure><img src="/files/j9no3s5baj2b15vWx9G6" alt="" width="255"><figcaption></figcaption></figure></div>

Field values available at trigger time reflect only what was present at the moment of creation. Values populated by subsequent actions or <code class="expression">space.vars.automations</code> will not be available.

### Field Updated

Fires when a specified field's value changes on a <code class="expression">space.vars.entity</code>.

<div data-with-frame="true"><figure><img src="/files/Ct8hvlH9IJfkj2YwllAY" alt="" width="257"><figcaption></figcaption></figure></div>

By default, the trigger fires on any change to the field. You can narrow this by configuring from and to values. For example, only when a Status field transitions from *Prospect* to *Qualified*. Transitions to or from a blank value are supported and can be explicitly targeted.

An optional trigger on create setting causes the trigger to evaluate at <code class="expression">space.vars.entity</code> creation. If no from/to values are configured, enabling this option will cause the trigger to fire on every new <code class="expression">space.vars.entity</code> regardless of the field's initial value.

### Stage Updated

Fires when a <code class="expression">space.vars.entity</code> moves from one workflow stage to another.&#x20;

<div data-with-frame="true"><figure><img src="/files/JYGfwLch7aDOfapNCGEp" alt="" width="254"><figcaption></figcaption></figure></div>

This trigger is only available on <code class="expression">space.vars.object</code> <code class="expression">space.vars.automations</code>; it is not available in <code class="expression">space.vars.contact</code>, Global, or standard <code class="expression">space.vars.object</code> <code class="expression">space.vars.automation</code> contexts.

### Form Submitted

Fires when a specific form associated with the <code class="expression">space.vars.entity</code> is submitted.&#x20;

<div data-with-frame="true"><figure><img src="/files/F79Lz6Yf8s69y4jMBqQI" alt="" width="252"><figcaption></figcaption></figure></div>

Scoped to a single form per trigger configuration. It does not fire for all form submissions on the <code class="expression">space.vars.entity</code>.

### Survey Submitted

Fires when a specific survey associated with the <code class="expression">space.vars.entity</code> is submitted.

<div data-with-frame="true"><figure><img src="/files/bZDBhmOLN3ROhpoXS5Mj" alt="" width="254"><figcaption></figcaption></figure></div>

Behaves consistently with Form Submitted, and is scoped to a single survey per trigger configuration.

### Email Received

Fires when an email is received from a <code class="expression">space.vars.contact</code>.&#x20;

<div data-with-frame="true"><figure><img src="/files/YaYb3nne88tJ5IgIFGyE" alt="" width="251"><figcaption></figcaption></figure></div>

This trigger is only available on <code class="expression">space.vars.contact</code> <code class="expression">space.vars.automations</code>. It is not available in <code class="expression">space.vars.workflow</code>, Global, or standard <code class="expression">space.vars.object</code> <code class="expression">space.vars.automation</code> contexts.

### Tag Added / Tag Removed

Fires when a specific tag is added to or removed from a <code class="expression">space.vars.entity</code>.&#x20;

<div data-with-frame="true"><figure><img src="/files/pIEIA994hzZa3SXVQVZM" alt="" width="255"><figcaption></figcaption></figure></div>

Tag Added and Tag Removed are separate trigger types. To respond to both directions of a tag change on the same <code class="expression">space.vars.automation</code>, configure one trigger of each type.

***

## What's Next?

Continue to [Scheduled Triggers](/docs/concepts/agentic-workflows/agentic-workflow-triggers/scheduled-triggers) to understand the trigger types that fire based on time or date field values.

<details>

<summary>Related Topics</summary>

* [Agentic Workflow Triggers](/docs/concepts/agentic-workflows/agentic-workflow-triggers)
* [Scheduled Triggers](/docs/concepts/agentic-workflows/agentic-workflow-triggers/scheduled-triggers)
* [Webhook Triggers](/docs/concepts/agentic-workflows/agentic-workflow-triggers/webhook-triggers)
* [Agentic Workflow Code Step](/docs/concepts/agentic-workflows/automation-code-steps)

</details>


# Scheduled Triggers

Learn how Kizen's scheduled triggers work, including activity past due, date-relative scheduling, business calendar logic, and recurring global Agentic Workflow cadences.

{% hint style="success" %}
**Audience:** Administrators, Solution Architects, and Developers

**Purpose:** Explains each scheduled trigger type in <code class="expression">space.vars.Kizen\_company\_name</code>: what it does, when it fires, and the behavioral details that affect how <code class="expression">space.vars.automations</code> respond to time-based conditions.
{% endhint %}

## Overview

Scheduled triggers fire based on time rather than a user action or data change. Instead of responding to an event as it happens, scheduled triggers calculate when a future execution should occur and queue it accordingly.

### Activity Past Due

Fires when a scheduled activity's due date and time passes without the activity being completed.

<div data-with-frame="true"><figure><img src="/files/5vONvwwQQcMWuXOe2dGe" alt="" width="256"><figcaption></figcaption></figure></div>

This trigger is useful for <code class="expression">space.vars.automations</code> that need to escalate or follow up when an activity is not completed on time. For example, sending a reminder to the <code class="expression">space.vars.entity</code> owner or reassigning the activity after a defined grace period.

### On or Around Date

Fires based on a date field on a <code class="expression">space.vars.entity</code>, running a set number of days before or after that date.

<div data-with-frame="true"><figure><img src="/files/oEoKU3rXF4kTYlFjIPHi" alt="" width="249"><figcaption></figcaption></figure></div>

This is the most configurable scheduled trigger and has several behavioral characteristics that are important to understand before use:

* **Future scheduling only:** When the <code class="expression">space.vars.automation</code> is activated, <code class="expression">space.vars.Kizen\_company\_name</code> evaluates existing <code class="expression">space.vars.entities</code> and schedules future executions based on their current date field values. <code class="expression">space.vars.entities</code> whose date field values are already in the past at activation time will not have executions scheduled. This trigger is not retroactive.
* **Recalculates on field change:** If the date field value changes after an execution has been scheduled, the scheduled execution is recalculated to reflect the new date. Changing the field moves the scheduled run. It does not create an additional execution.
* **Business calendar interaction:** When a calculated trigger date falls on a non-business day, the execution is adjusted to the nearest business day as defined by your business calendar configuration. The actual execution date may differ from the raw calculated date when non-business days are involved.
* **Single-instance scheduling:** This trigger schedules only one future execution at a time. For recurring or annual patterns, the next occurrence is scheduled only after the current one fires. Multiple future occurrences are never queued simultaneously.
* **Daylight saving time nuance:** Scheduled execution times may appear to shift when a DST transition occurs between when the execution is scheduled and when it runs.

### Scheduled

Fires on a user-configured recurring schedule. Only available on Global <code class="expression">space.vars.automations</code>.

<div data-with-frame="true"><figure><img src="/files/ZW4lSmSk86eqIGd28VOp" alt="" width="261"><figcaption></figcaption></figure></div>

Because Global <code class="expression">space.vars.automations</code> do not run in the context of a specific <code class="expression">space.vars.entity</code>, this trigger initiates executions on a time-based cadence. For example, every day or every week, independently of any <code class="expression">space.vars.entity</code> event. It is the appropriate choice when an <code class="expression">space.vars.automation</code> needs to run periodically without being tied to a specific <code class="expression">space.vars.entity</code> change.

A common pattern for Global <code class="expression">space.vars.automations</code> is to assign a <code class="expression">space.vars.entity</code> variable at the start of the <code class="expression">space.vars.automation</code>, giving subsequent steps a <code class="expression">space.vars.entity</code> context to operate against even though the trigger itself is not <code class="expression">space.vars.entity</code>-scoped.

***

## What's Next?

Continue to [Webhook Triggers](/docs/concepts/agentic-workflows/agentic-workflow-triggers/webhook-triggers) to understand how <code class="expression">space.vars.automations</code> can be initiated by inbound HTTP requests from external systems.

<details>

<summary><strong>Related Topics</strong></summary>

* [Automation Triggers](/docs/concepts/agentic-workflows/agentic-workflow-triggers)
* [Action-Based Triggers](/docs/concepts/agentic-workflows/agentic-workflow-triggers/action-based-triggers)
* [Webhook Triggers](/docs/concepts/agentic-workflows/agentic-workflow-triggers/webhook-triggers)
* [Automation Code Steps](/docs/concepts/agentic-workflows/automation-code-steps)

</details>


# Webhook Triggers

Learn how Kizen's Webhook trigger works, including how to configure inbound requests and extract data for use in Agentic Workflows.

{% hint style="success" %}
**Audience:** Administrators, Solution Architects, and Developers

**Purpose:** Documents the Webhook trigger in <code class="expression">space.vars.Kizen\_company\_name</code>: how it works, how data is extracted from inbound requests, and the behavioral details that affect how webhook-triggered <code class="expression">space.vars.automations</code> are designed and debugged.
{% endhint %}

## Overview

The Webhook trigger initiates an <code class="expression">space.vars.automation</code> via an inbound HTTP request from an external system. Each webhook trigger generates a unique URL that external tools and services can call directly to start an <code class="expression">space.vars.automation</code> execution.

***

## Webhook URL

Each Webhook trigger is assigned a unique URL based on the webhook name configured at setup.

<div data-with-frame="true"><figure><img src="/files/80H0foujZInAibVBWkaQ" alt="" width="246"><figcaption></figcaption></figure></div>

&#x20;The URL follows this format:

```
https://app.go.kizen.com/api/automations/{webhook-name}/webhook/{webhook-name}
```

The webhook name is user-defined and becomes part of the URL. Choose a name that clearly identifies the <code class="expression">space.vars.automation</code> and integration context. It can't be changed after the trigger is saved without breaking existing integrations.

***

## POST and GET Requests

The webhook trigger supports both POST and GET requests. The selected method determines which data extraction options are available.

### POST

**POST** requests support a request body payload. When POST is selected, the trigger configuration exposes an example Payload field, a Content-Type selector, and data extraction options for both the request body and URL query string.

#### Content-Types

When using POST, the Content-Type of the inbound request can be set to match the format sent by the external system. Supported content types include:

* `application/json`
* `application/javascript`
* `application/xml`
* `application/xhtml+xml`
* `application/x-www-form-urlencoded`
* `text/plain`
* `text/html`
* `text/xml`
* `text/csv`

### GET

**GET** requests do not include a request body. When GET is selected, only URL query string extraction is available.

***

## Record Identifier Requirements

Inbound webhook requests must include a <code class="expression">space.vars.entity</code> identifier so <code class="expression">space.vars.Kizen\_company\_name</code> can associate the request with the correct <code class="expression">space.vars.entity</code> and initiate the <code class="expression">space.vars.automation</code> in the appropriate context. The <code class="expression">space.vars.entity</code> identifier is required only for <code class="expression">space.vars.entity</code>-based <code class="expression">space.vars.automations</code>, not global ones.

***

## Authentication and Permissions

Every webhook call runs as a <code class="expression">space.vars.Kizen\_company\_name</code> user. Before the <code class="expression">space.vars.automation</code> starts, <code class="expression">space.vars.Kizen\_company\_name</code> checks that user's permissions, so the account attempting to authenticate decides whether the call succeeds.

### Authenticate the Caller

The webhook endpoint requires an authenticated, active user in the business. Most integrations authenticate with an API key tied to a service account, which lets you grant only the access the <code class="expression">space.vars.automation</code> needs rather than exposing broad admin permissions to an external system.

### Permission Rules

The following rules apply to every webhook call, whether the caller is a standard user account or a service account authenticated with an API key:

* The caller must be an active user in the business. An inactive or unauthenticated caller can't start an <code class="expression">space.vars.automation</code>.
* A Global <code class="expression">space.vars.automation</code> (An <code class="expression">space.vars.automation</code> that is not tied to a <code class="expression">space.vars.entity</code>) needs no permission beyond active membership in the business.
* A <code class="expression">space.vars.entity</code>-based <code class="expression">space.vars.automation</code> needs the same permissions required to start that <code class="expression">space.vars.automation</code> manually on the <code class="expression">space.vars.entity</code>. Specifically, it needs permission to start <code class="expression">space.vars.automations</code> on the <code class="expression">space.vars.object</code>, plus View access to the target <code class="expression">space.vars.entity</code>.

| Agentic Workflow type                                                    | What the caller needs                                                                                                                                                                                                                      |
| ------------------------------------------------------------------------ | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ |
| Global (not tied to a <code class="expression">space.vars.entity</code>) | An active user in the business. No additional permission.                                                                                                                                                                                  |
| <code class="expression">space.vars.entity</code>-based                  | An active user, plus permission to modify <code class="expression">space.vars.automations</code> on the <code class="expression">space.vars.object</code> and View access to the target <code class="expression">space.vars.entity</code>. |

### When a Call is Denied

If the caller doesn't have the required permissions for a <code class="expression">space.vars.entity</code>-based <code class="expression">space.vars.automation</code>, the endpoint returns a `403` response with this message:&#x20;

```
You do not have permission to start this Agentic Workflow on this Record.
```

To resolve the issue, give the caller View access to the <code class="expression">space.vars.entity</code> and confirm the account can start <code class="expression">space.vars.automations</code> on that <code class="expression">space.vars.object</code>, then retry the call.

{% hint style="warning" %}
Avoid using an over-permissioned account to authenticate. <code class="expression">space.vars.automations</code> run with elevated access regardless of who triggers them, so external callers only need permission to start the <code class="expression">space.vars.workflow</code>, not broad admin rights. <code class="expression">space.vars.Kizen\_company\_name</code> recommends a dedicated service account scoped to exactly what the <code class="expression">space.vars.workflow</code> requires: active membership for Global <code class="expression">space.vars.automations</code> and record access for <code class="expression">space.vars.entity</code>-based ones.
{% endhint %}

***

## Data Extraction

The Data Extraction section controls what information is pulled from the inbound request and made available as variable sources within the <code class="expression">space.vars.automation</code>. Available options differ by request method.

* **JSON Path** *(POST only).* Individual values can be extracted from the request body using JSONPath expressions. Each extraction row requires a JSON Path expression, a Name that becomes the variable identifier downstream, and optionally an Example Payload to preview the extracted value at configuration time. Rows can be added manually with **+ Add Value** or generated automatically from the Example Payload using **Generate Values Automatically**. *This is only applicable if the content-type is JSON.*
* **Extract Full Body Content** *(POST only).* When enabled, the full request body is extracted and made available as a variable source. Use this when the entire payload is needed downstream rather than specific fields.
* **Extract URL Query String** *(POST and GET).* When enabled, values from the URL query string are extracted and made available as variable sources. This option is available for both POST and GET requests.

All extracted values flow into the <code class="expression">space.vars.automation</code>'s variable system and can be referenced by any subsequent step that supports variable inputs.

***

## Webhook Triggers Cannot Fail Directly

The Webhook trigger itself does not fail. <code class="expression">space.vars.Kizen\_company\_name</code> always accepts the inbound request regardless of what the payload contains.

If a required <code class="expression">space.vars.automation</code> variable depends on a value not present in the payload, the failure surfaces at the variable evaluation stage and not at the trigger. When debugging a webhook-triggered <code class="expression">space.vars.automation</code> that is not behaving as expected, check variable initialization first.

***

## What's Next?

Now that you understand how each trigger type works, continue to [Agentic Workflow Code Steps](/docs/concepts/agentic-workflows/automation-code-steps) to learn learn how to run custom Python scripts within an <code class="expression">space.vars.automation</code> to handle complex logic, external API calls, and data transformations that go beyond built-in actions.

<details>

<summary>Related Topics</summary>

* [Agentic Workflow Triggers](/docs/concepts/agentic-workflows/agentic-workflow-triggers)
* [Action-Based Triggers](/docs/concepts/agentic-workflows/agentic-workflow-triggers/action-based-triggers)
* [Scheduled Triggers](/docs/concepts/agentic-workflows/agentic-workflow-triggers/scheduled-triggers)
* [Agentic Workflow Code Steps](/docs/concepts/agentic-workflows/automation-code-steps)

</details>


# Agentic Workflow Variables

Reference for Kizen Agentic Workflow variables: types, source fallback, runtime scope, and script aliases for admins, developers, and solution architects.

{% hint style="success" %}
**Audience:** Administrators, Developers, Solution Architects

**Purpose:** Complete reference for variables in <code class="expression">space.vars.Kizen\_company\_name</code> <code class="expression">space.vars.automations</code>: what they are, how they are configured, the variable types available, and how they behave at runtime and in script references.
{% endhint %}

## Overview

Variables are named values scoped to a single <code class="expression">space.vars.automation</code> execution that capture, store, and pass data between steps. They are one of the primary tools for making <code class="expression">space.vars.workflow</code> logic dynamic, data-consistent, and maintainable, allowing values resolved early in an execution to remain stable and reusable throughout the rest of the run.

***

## Agentic Workflow Variable Basics

{% hint style="info" %}
**Note:** Error handling configuration is documented separately for all variables. See Variable Error Handling **(Topic Coming Soon)**.
{% endhint %}

Before configuring specific variable types, a few foundational concepts and rules apply to every variable.

<div data-with-frame="true"><figure><img src="/files/pPvirLg92TXDl8tCRkys" alt="" width="563"><figcaption></figcaption></figure></div>

| Concept                                                        | What to Know                                                                                                                                                                                                                                                                                                                                                                                                                                  |
| -------------------------------------------------------------- | --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| **Single Value Variables vs. Kizen Entity as Variables types** | <p><strong>Single Value Variables</strong> store values<br>(Boolean, Date, DateTime, Number, Phone Number, String, UUID). <strong>Kizen Entities as Variables</strong> store references to structured <code class="expression">space.vars.entities</code> (Team Member, <code class="expression">space.vars.object</code> <code class="expression">space.vars.entity</code>). Choice determines available sources<br>and behaviors.</p>       |
| **Required variables**                                         | <p>Toggle <strong>Consider empty value an error (Required)</strong> under <strong>Error Handling</strong> to fail the step immediately when no source resolves to a non-blank value. <strong>Choose How to Handle Errors</strong> then controls what the Workflow does next.</p><p></p><p>Turn this on when downstream conditions depend on the value being present. Blank values passed into a condition step can produce filter errors.</p> |
| **API-compliant naming**                                       | Variable names must follow API-compliant rules so they remain valid as script aliases and API references.                                                                                                                                                                                                                                                                                                                                     |
| **Top-to-bottom evaluation order**                             | Variables are evaluated in the order they appear in the Initialize Variables list. A later variable can reference the resolved value of an earlier one. Order variables so each has access to the values it needs by the time it is evaluated.                                                                                                                                                                                                |
| **Multi-source fallback**                                      | Configure multiple sources under **Source and Fallback Order**, plus an optional **Static Value Fallback**. The Workflow tries the first source; if that source is blank, it falls back through each remaining source in turn. The **Static Value Fallback** is the final value used if every dynamic source is blank. This is useful for resolving from specific, to general, to a hardcoded constant..                                      |

***

## Variable Types

Variables are configured through the **Add Variable** modal, opened from the **Initialize Variables** panel by selecting **Click to add new variable**.&#x20;

<div data-with-frame="true"><figure><img src="/files/RsGab8jFdxLs6HVQ61iC" alt="" width="242"><figcaption></figcaption></figure></div>

The modal is organized into three numbered sections: **Variable Settings**, **Set Variable Source(s)**, and **Error Handling**. The **Variable Type** selector under Variable Settings is grouped into **Single Value Variables** and **Kizen Entities as Variables**. Each type is documented below.

### Single Value Variables

#### Boolean

The Boolean variable stores a true/false value. Useful for capturing flag states (such as opt-in status, eligibility, or condition outcomes) that drive downstream branching logic in conditions and code steps.

<div data-with-frame="true"><figure><img src="/files/lpNuJMY0ckiQDqMvSCiL" alt="" width="248"><figcaption></figcaption></figure></div>

**Configuration:** Source values can resolve to true, false, or blank. When blank and the variable is marked required, the execution errors immediately and the **Choose How to Handle Errors** selection determines what happens next.

#### Date

The Date variable stores a calendar date with no time component. Useful for capturing milestone dates (such as policy expiration, due dates, or contract start) that need to remain stable across the execution even if the underlying field changes.

<div data-with-frame="true"><figure><img src="/files/SaxG8R4rgn7P9hzJmDyA" alt="" width="240"><figcaption></figcaption></figure></div>

**Configuration:** Source values are formatted as MM/DD/YYYY. The variable resolves the source value to a date and stores it for use in downstream steps, delays, and condition evaluations.

#### DateTime

The DateTime variable stores a calendar date together with a time component. Useful for capturing precise timestamps (such as submission times, appointment slots, or SLA start moments) where time-of-day precision matters for downstream calculations.

<div data-with-frame="true"><figure><img src="/files/oAxaSypPtZLAnRw14D0A" alt="" width="239"><figcaption></figcaption></figure></div>

**Configuration:** Source values are formatted as MM/DD/YYYY with an associated time. The resolved value can be used as the basis for delays, time-based conditions, and any downstream step that requires both date and time precision.

#### Number

The Number variable stores a numeric value. Useful for capturing quantities, amounts, scores, or counts that need to remain consistent across steps or be passed to Code Steps and Math Operator actions.

<div data-with-frame="true"><figure><img src="/files/xkKpULWHpHpUzHoP9Irs" alt="" width="231"><figcaption></figcaption></figure></div>

**String Output Format:** When Number is selected, a **String Output Format** dropdown appears below the type grid. This controls how the numeric value is rendered when the variable is referenced as a string elsewhere in the <code class="expression">space.vars.workflow</code> (for example, in merge fields, notifications, or external HTTP request bodies). The default option visible is without commas.

#### Phone Number

The Phone Number variable stores a phone number value. Useful for capturing <code class="expression">space.vars.contact</code> phone numbers that need to be passed to messaging actions, external HTTP requests, or stored for later reference within the execution.

<div data-with-frame="true"><figure><img src="/files/nRPAPwfeIC0fydH71qba" alt="" width="228"><figcaption></figcaption></figure></div>

**Configuration:** Source values are formatted as a phone number (for example, +1 (123) 456-7890). The variable preserves the phone number format for use in downstream messaging and integration steps.

#### String

The String variable stores a text value. The most flexible Single Value type, useful for capturing names, identifiers, status labels, freeform notes, or any other text content that needs to be referenced consistently throughout the execution.

<div data-with-frame="true"><figure><img src="/files/x7fZfIxgNjr3gGTIACRc" alt="" width="230"><figcaption></figcaption></figure></div>

**Configuration:** Source values are stored as text. The resolved value can be used in merge fields, condition comparisons, code steps, and any downstream context that accepts a string input.

#### UUID

The UUID variable stores a universally unique identifier value. Useful for capturing <code class="expression">space.vars.entity</code> references as raw identifiers when a full <code class="expression">space.vars.object</code> <code class="expression">space.vars.entity</code> variable is not needed, or when an integration payload provides a UUID that needs to be passed through to a downstream system without <code class="expression">space.vars.entity</code> resolution.

<div data-with-frame="true"><figure><img src="/files/EaHmhxtEbvM9DITCZryr" alt="" width="236"><figcaption></figcaption></figure></div>

**Configuration:** Source values are stored as a UUID string (for example, A1-B2-C3-D4E format). Unlike an <code class="expression">space.vars.object</code> <code class="expression">space.vars.entity</code> variable, a UUID variable does not resolve the identifier to a record reference; it stores the raw value only. When <code class="expression">space.vars.entity</code> resolution is needed, use an <code class="expression">space.vars.object</code> <code class="expression">space.vars.entity</code> variable with UUID matching instead.

### Kizen Entities as Variables

#### Team Member

The Team Member variable stores a reference to a specific team member. Useful for capturing the assigned team member at trigger time so that subsequent steps can reference who was assigned even if the assignment changes mid-execution, or for routing notifications, assignments, and tasks to a team member resolved earlier in the <code class="expression">space.vars.workflow</code>.

<div data-with-frame="true"><figure><img src="/files/cVkTF5v6hHJJlUo7aKku" alt="" width="236"><figcaption></figcaption></figure></div>

**Configuration:** Sources can resolve to a team member by team member field on a <code class="expression">space.vars.entity</code>, by direct selection at design time, or by a value that maps to a team member through UUID or name matching. See Resolving Values to <code class="expression">space.vars.entities</code> below for matching behavior.

#### Object Record

The <code class="expression">space.vars.object</code> <code class="expression">space.vars.entity</code> variable stores a reference to a specific <code class="expression">space.vars.entity</code> in a <code class="expression">space.vars.Kizen\_company\_name</code> <code class="expression">space.vars.object</code>. Useful for capturing a target <code class="expression">space.vars.entity</code> for downstream actions, passing <code class="expression">space.vars.entity</code> references to code steps, or identifying the target of a Start <code class="expression">space.vars.automation</code> action.

<div data-with-frame="true"><figure><img src="/files/fiC2rVhAxl2IKjHENfiZ" alt="" width="239"><figcaption></figcaption></figure></div>

**Object selection:** After selecting <code class="expression">space.vars.object</code> <code class="expression">space.vars.entity</code>, choose the target <code class="expression">space.vars.object</code> from the **Object** dropdown. Available options include <code class="expression">space.vars.contacts</code> and any <code class="expression">space.vars.objects</code> configured in the business (for example, Concessions, Lost Item Requests, Ride Waivers, Tickets). The variable then holds a reference to a <code class="expression">space.vars.entity</code> from that <code class="expression">space.vars.object</code> specifically.

<div data-with-frame="true"><figure><img src="/files/gMkhcT66lI1rxgmC6CgZ" alt="" width="375"><figcaption></figcaption></figure></div>

**Configuration:** Sources can resolve to a <code class="expression">space.vars.entity</code> by direct reference, by a relationship field on the context record, or by a raw value (string or UUID) that maps to a record through UUID or name matching. See Resolving Values to <code class="expression">space.vars.entities</code> below for matching behavior.

#### Resolving Values to Records

When a source provides a raw value (such as a text string or UUID from a webhook payload) and the variable is typed as <code class="expression">space.vars.object</code> <code class="expression">space.vars.entity</code> or Team Member, the <code class="expression">space.vars.workflow</code> resolves that value to a <code class="expression">space.vars.entity</code> reference using one of two matching mechanisms:

* **UUID matching:** Treats the source value as a unique identifier and looks up the exact <code class="expression">space.vars.entity</code>. Precise and unambiguous; preferred whenever a UUID is available.
* **Name matching:** Treats the source value as a display name and finds the <code class="expression">space.vars.entity</code> whose name matches. More flexible when only a display name is available, but it can produce unexpected results if multiple <code class="expression">space.vars.entities</code> share the same name.

***

## Runtime Behavior

This section covers how variables behave during a live execution: their scope, how their values pipeline through the run, and how they are surfaced for debugging.

* **Per-execution scope only:** Variables are scoped to a single execution. Each execution has its own independent copy of variable values, initialized fresh when the execution starts. Variables do not persist between executions, are not shared across executions running concurrently on the same <code class="expression">space.vars.entity</code>, and cannot be read or written by other <code class="expression">space.vars.workflows</code>. Variables are an execution-local data store, not a shared state mechanism.
* **Values pipeline efficiently through the execution:** Once a variable has a value, every step after it can use that value without recalculating. The value stays the same for the rest of the execution unless an **Update Variable** action step changes it (see [Agentic Workflow Control Actions](/docs/concepts/agentic-workflows/agentic-workflow-actions/agentic-workflow-control-actions)). **Update Variable** supports the same static fallback and required options as the original variable, but it can only pull from fields or other variables. Trigger sources are not available.

  \
  Because the value stays fixed once it's set, variables are the best tool for data consistency. Capturing a field value into a variable at trigger time keeps that value stable for the whole execution, even if the underlying field changes mid-run.
* **The variable viewer shows latest values only:** The variable viewer in the <code class="expression">space.vars.workflow</code> interface reflects the current state of each variable at the moment it is being viewed, not the historical value at any specific step. When debugging an execution and trying to understand what value a variable held at a specific point in time, use the full execution history rather than the variable viewer, since the viewer may show a value that was updated after the step of interest ran.
* **Debug mode surfaces variable resolution:** Debug mode exposes variable values during a test execution so <code class="expression">space.vars.workflow</code> authors can validate that variables are resolving as expected before activating a <code class="expression">space.vars.workflow</code> in production.&#x20;

***

## Variables in Code Steps

Variables can be wired into a code step as inputs, where they become Python attributes on the code step's `inputs` <code class="expression">space.vars.object</code> (for example, `inputs.policy_id`). The attribute name is set when inputs are selected on the code step itself, not on the variable definition. Because the alias lives on the code step, renaming a variable's display name does not affect code steps that already reference it.

Variables referenced inside a code step always access the value of that variable within the current execution, since variables are scoped to a single execution.

For full detail on writing code steps, configuring inputs and outputs, and working with typed values, see [Agentic Workflow Code Steps](/docs/concepts/agentic-workflows/automation-code-steps).

***

## Key Use Cases

Variables are applicable across any <code class="expression">space.vars.workflow</code> where values need to be captured once and reused consistently throughout the execution. The following examples illustrate common patterns in three industries where data consistency, auditability, and reliable <code class="expression">space.vars.entity</code> resolution are core operational requirements.

### **Industry Examples**

{% tabs %}
{% tab title="Insurance" %}
Insurance <code class="expression">space.vars.workflows</code> use variables to capture policy and claim attributes at trigger time so that downstream steps operate on stable values even as records are updated mid-execution, and to resolve assignees, dates, and identifiers cleanly across underwriting, claims, and renewals.

**Examples include:**

* Capturing the policy expiration date into a Date variable at trigger time so that downstream renewal outreach, delay timing, and condition checks all reference the same value even if the field is updated mid-execution
* Storing the assigned adjuster in a Team Member variable when a claim is filed so that subsequent notifications, task assignments, and escalations route consistently regardless of later reassignments
* Resolving a webhook payload's policy identifier into an <code class="expression">space.vars.object</code> <code class="expression">space.vars.entity</code> variable via UUID matching so that subsequent steps can act on the policy record directly
* Using a Number variable with a configured String Output Format to format claim amounts cleanly in outbound notifications and external HTTP requests

**How variables help:**

* Lock in critical policy and claim attributes at trigger time, preventing inconsistent behavior when underlying fields change during a long-running execution
* Resolve external identifiers (from webhook payloads, integration callbacks, or API submissions) into record references without separate lookup steps
* Provide a single source of truth for SLA dates, assignees, and monetary amounts across complex multi-branch <code class="expression">space.vars.workflows</code>
* Make code steps and integration payloads predictable by referencing stable aliases instead of repeatedly re-reading fields&#x20;
  {% endtab %}

{% tab title="Healthcare" %}
Healthcare organizations use variables to capture patient and encounter attributes consistently across the patient lifecycle, ensuring that downstream care coordination, scheduling, and follow-up steps all reference the same resolved values regardless of mid-execution record changes.

**Examples include:**

* Storing the patient's primary care manager in a Team Member variable at intake so that all follow-up tasks, post-discharge check-ins, and care coordination activities route to the same person
* Capturing the discharge date into a DateTime variable so that downstream delays, check-in scheduling, and SLA evaluations all use a stable timestamp
* Resolving an external EHR identifier passed via webhook into an <code class="expression">space.vars.object</code> <code class="expression">space.vars.entity</code> variable via UUID matching so that the <code class="expression">space.vars.workflow</code> can act on the correct patient record without additional lookup steps
* Using a String variable to capture authorization status at submission so that downstream conditions evaluate against the original status even if the field is updated during processing

**How variables help:**

* Ensure follow-up tasks, check-ins, and care coordination steps reference consistent patient, encounter, and assignee values across long-running <code class="expression">space.vars.workflows</code>
* Resolve EHR and integration payload identifiers into <code class="expression">space.vars.Kizen\_company\_name</code> record references cleanly via UUID matching
* Stabilize SLA-driven timing by capturing clinical milestone dates once and reusing them across multiple downstream steps
* Reduce conditional logic errors by ensuring condition steps and code steps reference the same captured values rather than re-reading volatile fields
  {% endtab %}

{% tab title="Financial Services" %}
Financial services organizations use variables to capture account, application, and client attributes at the start of an execution so that relationship management, loan origination, and compliance <code class="expression">space.vars.workflows</code> operate on stable, auditable values throughout the run.

**Examples include:**

* Storing the relationship manager in a Team Member variable when an account <code class="expression">space.vars.workflow</code> begins so that portfolio reviews, outreach tasks, and escalations all route consistently
* Capturing the application submission timestamp in a DateTime variable so that downstream SLA delays and regulatory deadline checks all measure from the same starting point
* Resolving a loan application identifier from an external system into an <code class="expression">space.vars.object</code> <code class="expression">space.vars.entity</code> variable via UUID matching so that subsequent steps act on the correct application <code class="expression">space.vars.entity</code>
* Using a Number variable with a configured String Output Format to format loan amounts and account balances consistently across outbound messages and integration payloads

**How variables help:**

* Provide audit-friendly, stable values for compliance-sensitive <code class="expression">space.vars.workflows</code> where the inputs to a decision need to remain reconstructable
* Resolve external identifiers from integration callbacks and webhook payloads into <code class="expression">space.vars.Kizen\_company\_name</code> <code class="expression">space.vars.entity</code> references without additional lookup logic
* Align SLA and regulatory deadline calculations to a single captured timestamp, reducing the risk of drift across long-running executions
* Make code steps and integration payloads deterministic by referencing stable aliases rather than re-reading fields that may change mid-execution
  {% endtab %}
  {% endtabs %}

***

## What's Next?

Continue to <code class="expression">space.vars.automation</code> Permissions **(Topic Coming Soon)** to learn how access to <code class="expression">space.vars.automations</code> is controlled, who can view and manage executions, and how the runtime permission bypass behavior works.

<details>

<summary>Related Topics</summary>

* [Agentic Workflow Conditions](/docs/concepts/agentic-workflows/agentic-workflow-conditions)
* [Agentic Workflow Actions](/docs/concepts/agentic-workflows/agentic-workflow-actions)
* [Agentic Workflow Code Steps](/docs/concepts/agentic-workflows/automation-code-steps)
* Agentic Workflow Status & Lifecycle **(Topic Coming Soon)**

</details>


# Agentic Workflow Actions

Learn how Kizen Agentic Workflow Actions work, what types are available, how context affects availability, and key behaviors that apply to all actions before you configure them.

{% hint style="success" %}
**Audience:** Administrators, Developers, Solution Architects

**Purpose**: Complete reference for the action step types available in <code class="expression">space.vars.Kizen\_company\_name</code> <code class="expression">space.vars.automations</code>: what each one does, how it is configured, and what behavioral nuances affect how <code class="expression">space.vars.automations</code> should be designed.
{% endhint %}

## Overview

<code class="expression">space.vars.automation</code> Actions are the units of work within an <code class="expression">space.vars.automation</code> that produce outcomes. Actions can update <code class="expression">space.vars.entities</code>, send communications, call external systems, and control how the <code class="expression">space.vars.automation</code> itself runs.&#x20;

Available action types vary depending on the <code class="expression">space.vars.automation</code>'s <code class="expression">space.vars.entity</code> and <code class="expression">space.vars.object</code> type. Global <code class="expression">space.vars.automations</code> have a more limited action set because they have no <code class="expression">space.vars.entity</code>. <code class="expression">space.vars.contact</code> <code class="expression">space.vars.automations</code> and <code class="expression">space.vars.object</code> <code class="expression">space.vars.automations</code> each have slightly different sets as well. Understanding this before configuring actions helps you know what to expect when building.

### Why Agentic Workflow Actions Matter

<code class="expression">space.vars.Kizen\_company\_name</code> organizes action types into seven categories: <code class="expression">space.vars.activities</code>, <code class="expression">space.vars.automations</code>, Fields, Messages, Related <code class="expression">space.vars.objects</code>, Team, and Integration. Each category addresses a distinct type of operation. Understanding which action types are available, how they are configured, and how they behave at runtime is necessary for building <code class="expression">space.vars.automations</code> that produce reliable, predictable outcomes.

Each category provides a distinct capability:

* **Activities:** Create and manage tasks, calls, events, and other <code class="expression">space.vars.activity</code> <code class="expression">space.vars.entities</code> tied to <code class="expression">space.vars.contacts</code> or other <code class="expression">space.vars.objects</code>.
* **Agentic Workflows:** Start, pause, cancel, and redirect <code class="expression">space.vars.automation</code> executions, enabling multi-<code class="expression">space.vars.automations</code>, loop patterns, and conditional termination.
* **Fields:** Update, clear, and compute field values on <code class="expression">space.vars.entities</code> without manual intervention, keeping data accurate and consistent as <code class="expression">space.vars.entities</code> move through <code class="expression">space.vars.workflows</code>.
* **Messages:** Send emails and other outbound communications to <code class="expression">space.vars.contacts</code>, owners, or specified recipients at the right point in a process.
* **Related Objects:** Create, modify, and archive <code class="expression">space.vars.entities</code> across related <code class="expression">space.vars.objects</code>, allowing <code class="expression">space.vars.automations</code> to manage the full lifecycle of connected data.
* **Team:** Assign owners, notify team members, and route work to the right people based on <code class="expression">space.vars.automation</code> logic.
* **Integration:** Connect <code class="expression">space.vars.automations</code> to third-party systems via HTTP and invoke AI capabilities for language model calls, file extraction, and audio transcription.

***

## System Behavior of Agentic Workflow Actions

Before diving into individual action types, a few foundational behaviors apply to all Action steps.

<div data-with-frame="true"><figure><img src="/files/NqNZY9nPaAd6pbhkSRjj" alt="" width="212"><figcaption></figcaption></figure></div>

* **Action steps produce outcomes:** <code class="expression">space.vars.condition\_step</code> steps evaluate and route; action steps do the work. An action might update a field, send an email, archive a <code class="expression">space.vars.entity</code>, or call an external API.
* **Available action types depend on context:** The available action types depend on whether the <code class="expression">space.vars.automation</code> is global or <code class="expression">space.vars.entity</code>-based, and for <code class="expression">space.vars.entity</code>-based <code class="expression">space.vars.automations</code>, whether the context <code class="expression">space.vars.object</code> is a <code class="expression">space.vars.contact</code> or a <code class="expression">space.vars.object</code>. Global <code class="expression">space.vars.automations</code> have a reduced action set because actions that require a context <code class="expression">space.vars.entity</code> do not apply. <code class="expression">space.vars.contact</code> <code class="expression">space.vars.automations</code> expose <code class="expression">space.vars.contact</code>-specific actions such as Change Tags, Send Email to <code class="expression">space.vars.contact</code>, and Send Text to <code class="expression">space.vars.contact</code> that are not available on <code class="expression">space.vars.object</code> <code class="expression">space.vars.automations</code>, though object <code class="expression">space.vars.automations</code> can still send an email or text to a related <code class="expression">space.vars.contact</code>.
* **Actions within branches execute sequentially:** Execution order across parallel branches is not guaranteed. Do not design branches that depend on a specific execution order or assume that steps across branches will interleave in a predictable way.
* **Action types are immutable once saved:** Once an <code class="expression">space.vars.automation</code> is saved, an action step's type cannot be changed, only its configuration. To use a different action type at a given step, delete the step and recreate it. Plan your action types before saving <code class="expression">space.vars.automations</code> that are in active use.

***

## Types of Agentic Workflows Actions

<code class="expression">space.vars.Kizen\_company\_name</code> <code class="expression">space.vars.automations</code> support the following action types, organized by category. Available actions vary depending on whether the <code class="expression">space.vars.automation</code> is global or <code class="expression">space.vars.entity</code>-based.

#### Activities

* **Schedule Activity**: Creates a Scheduled <code class="expression">space.vars.activity</code> on the <code class="expression">space.vars.entity</code> with configurable assignment, due date, notes, and notifications.
* **Delete Scheduled Activities**: Deletes all scheduled <code class="expression">space.vars.activities</code> of a specified type on the <code class="expression">space.vars.entity</code>.

For more information, see [Activity Actions](/docs/concepts/agentic-workflows/agentic-workflow-actions/agentic-workflow-activity-actions).

#### Agentic Workflow

* **Start Agentic Workflows**: Starts one or more <code class="expression">space.vars.automations</code> on the <code class="expression">space.vars.entity</code>, a related <code class="expression">space.vars.entity</code>, a variable record, or as a global <code class="expression">space.vars.automation</code>.
* **Modify Agentic Workflows**: Pauses or cancels one or more <code class="expression">space.vars.automations</code> running on the <code class="expression">space.vars.entity</code>, a related <code class="expression">space.vars.entity</code>, or a variable <code class="expression">space.vars.entity</code>.
* **Go To Agentic Workflow Step**: Redirects execution to a different step within the current <code class="expression">space.vars.automation</code>.
* **Stop Execution**: Terminates or suspends the current execution and sets it to a specified terminal state.
* **Update Variable:** Updates the value of an existing variable during execution.
* **Code Step**: Executes custom logic within the <code class="expression">space.vars.automation</code> using a sandboxed runtime environment.

For more information, see [Agentic Workflow Control Actions](/docs/concepts/agentic-workflows/agentic-workflow-actions/agentic-workflow-control-actions).

#### Fields

* **Change Field Value**: Updates or clears one or more field values on the <code class="expression">space.vars.entity</code>.
* **Change Tags**: Adds or removes tags on the <code class="expression">space.vars.contact</code> <code class="expression">space.vars.entity</code>.
* **Math Operators**: Performs arithmetic on numeric values and writes the result to a field or variable.

For more information, see [Field Actions](/docs/concepts/agentic-workflows/agentic-workflow-actions/agentic-workflow-field-actions).

#### Messages

* **Send Email**: Sends an email to a <code class="expression">space.vars.contact</code> <code class="expression">space.vars.entity</code>.
* **Send Text**: Sends a text message to a <code class="expression">space.vars.contact</code> <code class="expression">space.vars.entity</code>.

#### Related Objects

* **Create Entity**: Creates a new <code class="expression">space.vars.entity</code> in a specified <code class="expression">space.vars.object</code> with configurable duplicate handling.
* **Modify Related Entity**: Modifies a <code class="expression">space.vars.entity</code> through a relationship field on the <code class="expression">space.vars.entity</code>.
* **Send Email to Related Contact(s)**: Sends an email to a <code class="expression">space.vars.contact</code> identified through a relationship field on the context <code class="expression">space.vars.entity</code>.
* **Send Text To Related Contact(s)**: Sends a text message to a <code class="expression">space.vars.contact</code> identified through a relationship field on the context <code class="expression">space.vars.entity</code>.
* **Archive Record(s)**: Archives the context <code class="expression">space.vars.entity</code>, a related <code class="expression">space.vars.entity</code>, or a variable-identified <code class="expression">space.vars.entity</code>.

For more information, see [Related Object Actions](/docs/concepts/agentic-workflows/agentic-workflow-actions/agentic-workflow-related-object-actions).

#### Team Actions

* **Notification (Email)**: Sends an email notification to a team member.
* **Notification (Text)**: Sends a text message to a team member.
* **Assign Team Member**: Adds a team member to the <code class="expression">space.vars.entity</code>'s team member association list.

For more information, see [Team Actions](/docs/concepts/agentic-workflows/agentic-workflow-actions/agentic-workflow-team-actions).&#x20;

#### Integration

* **External HTTP Requests**: Sends an outbound HTTP request (GET, PUT, POST, PATCH, or DELETE) to an external URL.
* **Call LLM**: Sends a prompt to a configured language model and stores the response.
* **File Extraction**: Extracts structured data from file attachments.
* **Audio Transcription**: Transcribes audio content to text.

For more information, see [Integration Actions](/docs/concepts/agentic-workflows/agentic-workflow-actions/agentic-workflow-integration-actions).

***

## What's Next

Kizen <code class="expression">space.vars.automations</code> support 25+ action types across seven categories. Start learning more about [Activity Actions](/docs/concepts/agentic-workflows/agentic-workflow-actions/agentic-workflow-activity-actions) or navigate directly to the category most relevant to your use case below:

<details>

<summary>Related Topics</summary>

* [Automation Control Actions](/docs/concepts/agentic-workflows/agentic-workflow-actions/agentic-workflow-control-actions)
* [Field Actions](/docs/concepts/agentic-workflows/agentic-workflow-actions/agentic-workflow-field-actions)
* [Related Object Actions](/docs/concepts/agentic-workflows/agentic-workflow-actions/agentic-workflow-related-object-actions)
* [Team Actions](/docs/concepts/agentic-workflows/agentic-workflow-actions/agentic-workflow-team-actions)
* [Integration Actions](/docs/concepts/agentic-workflows/agentic-workflow-actions/agentic-workflow-integration-actions)
* [Messages Actions](/docs/concepts/agentic-workflows/agentic-workflow-actions/agentic-workflow-messages-actions)

</details>


# Agentic Workflow Activity Actions

Activity actions automate the creation and management of scheduled activities in Kizen Agentic Workflows, including assignment rules, due date configuration, and error handling behavior.

{% hint style="success" %}
**Audience:** Administrators, Developers, Solution Architects&#x20;

**Purpose**: A reference for the <code class="expression">space.vars.activity</code> action types available in <code class="expression">space.vars.Kizen\_company\_name</code> <code class="expression">space.vars.automations</code>: how to schedule and delete <code class="expression">space.vars.activities</code> on a <code class="expression">space.vars.entity</code>, and what configuration options are available for assignment, due dates, and notifications.
{% endhint %}

## Overview

<code class="expression">space.vars.activity</code> actions automate the creation and removal of scheduled <code class="expression">space.vars.activities</code> on the <code class="expression">space.vars.entity</code>. Use them to assign follow-up tasks, reminders, and other work items to team members as part of a larger <code class="expression">space.vars.automation</code> <code class="expression">space.vars.workflow</code> without manual intervention.

{% hint style="info" %}
**Note:** For error handling, see [Agentic Workflow Error Handling](/docs/concepts/agentic-workflows/agentic-workflow-actions/agentic-workflow-error-handling).
{% endhint %}

***

## Schedule Activity

The Schedule <code class="expression">space.vars.activity</code> action creates a scheduled <code class="expression">space.vars.activity</code> on the context <code class="expression">space.vars.entity</code>. It is one of the more configurable action types in the platform, with a full set of assignment, due date, association, and notification options.

<div data-with-frame="true"><figure><img src="/files/TUYHTcFSWoBdTZpOulsH" alt="" width="254"><figcaption></figcaption></figure></div>

**Assignment rules**

The **Assign To** dropdown offers the following assignment types:

* **Round Robin (Team Member of Any Role):** Cycles assignment across all verified employees in the business, regardless of role
* **Round Robin (Team Member of Specific Role):** Cycles assignment across all team members who hold a specified role
* **Round Robin (Select Team Members):** Cycles assignment across a manually selected list of team members
* **Owner:** Assigns the <code class="expression">space.vars.activity</code> to whoever currently owns the context <code class="expression">space.vars.entity</code> at the time the step executes
* **Specific Team Member:** Assigns to a single named team member selected at design time
* **Custom Team Selector Field:** Resolves the assignee from a team member field on the context <code class="expression">space.vars.entity</code>
* **Last Active Team Member (Any Role):** Assigns to the most recently active team member on the <code class="expression">space.vars.entity</code>, regardless of role
* **Last Active Team Member (Specific Role):** Assigns to the most recently active team member on the <code class="expression">space.vars.entity</code> who holds a specified role
* **Specific Role:** Assigns to a team member of a specified role
* **Team Member From Variable:** Resolves the assignee from a variable holding a team member value

Round robin assignment tracking is maintained per <code class="expression">space.vars.automation</code> step, not globally across the business or across other steps or <code class="expression">space.vars.automations</code>. Two separate Schedule <code class="expression">space.vars.activity</code> steps, even within the same <code class="expression">space.vars.automation</code>, each maintain their own independent round robin sequence.

**Due date configuration:** The **Assignment Timeframe** dropdown controls when the <code class="expression">space.vars.activity</code> is due:

* **Immediately:** the <code class="expression">space.vars.activity</code> is due at the time the step executes
* **With Delay:** the due date is offset by a specified duration from the time of execution
* **On or Around Date:** the due date is set to a specified date field on the <code class="expression">space.vars.entity</code>, with an optional offset
* **On or Around Date/Time Variable:** the due date is resolved from a date/time variable, with an optional offset

**Notes:** Freeform note content can be attached to the <code class="expression">space.vars.activity</code>. The notes field supports merge fields sourced from variables, context <code class="expression">space.vars.entity</code> attributes, or business fields.

**Notifications:** Use **+ Add Notification** to configure notification behavior for the assigned team member when the <code class="expression">space.vars.activity</code> is created.

## Delete Scheduled Activities

The Delete Scheduled <code class="expression">space.vars.activities</code> action deletes all scheduled <code class="expression">space.vars.activities</code> of a specified type associated with the context <code class="expression">space.vars.entity</code>.&#x20;

<div data-with-frame="true"><figure><img src="/files/u53HqLTbTVeJsJJcFe6h" alt="" width="264"><figcaption></figcaption></figure></div>

This is useful for clearing pending <code class="expression">space.vars.activities</code> when a record reaches a state that makes them irrelevant. For example, removing open follow-up reminders when an opportunity closes or a contact opts out. The deletion is scoped to the context <code class="expression">space.vars.entity</code> and the selected <code class="expression">space.vars.activity</code> type; <code class="expression">space.vars.activities</code> on other <code class="expression">space.vars.entities</code> are not affected.

**Activity selection:** Use the **Find Activities** search field under **Delete Scheduled Activities** to locate and select the <code class="expression">space.vars.activity</code> type to delete. All <code class="expression">space.vars.activity</code> types configured for the business are available in the list.

***

## Key Use Cases

<code class="expression">space.vars.activity</code> actions are applicable across any <code class="expression">space.vars.workflow</code> that requires structured task assignment and follow-up. The following examples illustrate common patterns in three industries where consistent, auditable <code class="expression">space.vars.activity</code> management is a core operational requirement.

#### Industry Examples

{% tabs %}
{% tab title="Insurance" %}
Insurance <code class="expression">space.vars.workflows</code> use <code class="expression">space.vars.activity</code> actions to automate task creation across underwriting, claims, renewals, and compliance while ensuring that structured follow-up work is assigned and tracked at every stage of the policy and claims lifecycle.

**Examples include:**

* Scheduling a claims review <code class="expression">space.vars.activity</code> assigned to the adjuster identified by a team selector field on the claim <code class="expression">space.vars.entity</code>, due within a configured SLA window from the date of submission
* Scheduling a renewal outreach <code class="expression">space.vars.activity</code> assigned via round robin to the retention team, due on or around the policy expiration date field
* Scheduling an underwriting follow-up <code class="expression">space.vars.activity</code> when a required document field is left blank at submission, assigned to the underwriter who owns the <code class="expression">space.vars.entity</code>
* Deleting all pending follow-up <code class="expression">space.vars.activities</code> on a policy <code class="expression">space.vars.entity</code> when the policy is marked as canceled or non-renewed

**How Activity actions help:**

* Automate task creation at key lifecycle events such as new submissions, claim filings, renewal windows, without relying on manual assignment
* Enforce SLA-aligned due dates by tying <code class="expression">space.vars.activity</code> timeframes to date fields on the <code class="expression">space.vars.entity</code> rather than fixed offsets
* Keep team queues clean by removing irrelevant <code class="expression">space.vars.activities</code> when a <code class="expression">space.vars.entity</code> reaches a terminal state
* Provide a structured, assignable work item at every stage of the policy or claims process that can be tracked, reported on, and audited
  {% endtab %}

{% tab title="Healthcare" %}
Healthcare organizations use <code class="expression">space.vars.activity</code> actions to automate task assignment and follow-up scheduling across the patient lifecycle while ensuring the right team member is assigned the right work at the right time without manual coordination.

**Examples include:**

* Scheduling an initial intake follow-up <code class="expression">space.vars.activity</code> assigned via round robin to the next available care coordinator when a new patient record is created
* Scheduling a post-discharge check-in <code class="expression">space.vars.activity</code> assigned to the patient's primary care manager, due three days after a discharge date field is set
* Scheduling a prior authorization follow-up assigned to the last active team member on the record when an authorization request is submitted
* Deleting all pending outreach <code class="expression">space.vars.activities</code> when a patient record is marked as inactive or transferred to another provider

**How Activity actions help:**

* Ensure follow-up tasks are created and assigned automatically, reducing the risk of patients falling through the gaps between care touchpoints
* Distribute task assignment across care teams using round robin logic without requiring manual queue management
* Align <code class="expression">space.vars.activity</code> due dates to clinical milestones (admission dates, discharge dates, authorization deadlines) using date field offsets.
* Remove stale tasks automatically when a <code class="expression">space.vars.entity</code>s status changes, keeping team queues accurate and actionable
  {% endtab %}

{% tab title="Financial Services" %}
Financial services organizations use <code class="expression">space.vars.activity</code> actions to automate task assignment across relationship management, loan origination, compliance reviews, and client onboarding — ensuring that time-sensitive work is created, assigned, and tracked without manual intervention.

**Examples include:**

* Scheduling an annual portfolio review <code class="expression">space.vars.activity</code> assigned to the relationship manager who owns the account, due on or around the client's scheduled review date field
* Scheduling a loan document follow-up <code class="expression">space.vars.activity</code> assigned via round robin to the processing team when an application is submitted with missing documentation
* Scheduling a KYC review <code class="expression">space.vars.activity</code> assigned to the compliance officer identified by a field on the account <code class="expression">space.vars.entity</code>, due within a regulatory timeframe from account opening
* Deleting all pending outreach <code class="expression">space.vars.activities</code> on a loan application <code class="expression">space.vars.entity</code> when the application is closed, whether funded, declined, or withdrawn.

**How Activity actions help:**

* Align task due dates to client-specific milestones (review dates, maturity dates, regulatory deadlines) using date field and variable-based timeframe configuration.
* Distribute work across relationship managers, processors, and compliance staff using role-based or round robin assignment without manual queue management
* Ensure that time-sensitive compliance and review tasks are created automatically when triggering conditions are met, reducing the risk of missed deadlines
* Remove stale tasks automatically when an application or account reaches a terminal state, keeping team workloads accurate and auditable
  {% endtab %}
  {% endtabs %}

***

## What's Next?

Continue to [Agentic Workflow Control Actions](/docs/concepts/agentic-workflows/agentic-workflow-actions/agentic-workflow-control-actions) to learn how to start, pause, cancel, and redirect <code class="expression">space.vars.automations</code> from within an execution. This includes how to target related <code class="expression">space.vars.entities</code>, manage paused executions, and control terminal states.

<details>

<summary>Related Topics</summary>

* [Automation Control Actions](/docs/concepts/agentic-workflows/agentic-workflow-actions/agentic-workflow-control-actions)
* [Field Actions](/docs/concepts/agentic-workflows/agentic-workflow-actions/agentic-workflow-field-actions)
* [Related Object Actions](/docs/concepts/agentic-workflows/agentic-workflow-actions/agentic-workflow-related-object-actions)
* [Team Actions](/docs/concepts/agentic-workflows/agentic-workflow-actions/agentic-workflow-team-actions)
* [Integration Actions](/docs/concepts/agentic-workflows/agentic-workflow-actions/agentic-workflow-integration-actions)
* [Messages Actions](/docs/concepts/agentic-workflows/agentic-workflow-actions/agentic-workflow-messages-actions)

</details>


# Agentic Workflow Control Actions

Learn how Kizen Agentic Workflow control actions work, including starting, pausing, canceling, and redirecting Agentic Workflows, managing execution state, and updating variables mid-flow.

{% hint style="success" %}
**Audience:** Administrators, Developers, Solution Architects

**Purpose:** Complete reference for the <code class="expression">space.vars.automation</code> control action types available in <code class="expression">space.vars.Kizen\_company\_name</code> <code class="expression">space.vars.automations</code>.
{% endhint %}

## Overview

<code class="expression">space.vars.automation</code> control actions manage the execution state of <code class="expression">space.vars.automations</code>, both the current <code class="expression">space.vars.automation</code> and others running elsewhere in the system. Use them to orchestrate multi-<code class="expression">space.vars.automation</code>s, handle branching terminal states, loop within a single <code class="expression">space.vars.automation</code>, and keep variable values current as execution progresses.

{% hint style="info" %}
**Note:** For error handling, see [Agentic Workflow Error Handling](/docs/concepts/agentic-workflows/agentic-workflow-actions/agentic-workflow-error-handling).
{% endhint %}

***

## Start Agentic Workflow

The Start <code class="expression">space.vars.automations</code> action initiates one or more <code class="expression">space.vars.automations</code> from within the current execution. Use **Find Agentic Workflows** to select the target <code class="expression">space.vars.automation</code>(s).

<div data-with-frame="true"><figure><img src="/files/SoUWrRQfPrd1B63oGXDo" alt="" width="276"><figcaption></figcaption></figure></div>

**Choose Record Source:** Select one of four options to determine which <code class="expression">space.vars.entity</code> the target <code class="expression">space.vars.automation</code> runs against.

* **This Record:** starts the <code class="expression">space.vars.automation</code> on the current context <code class="expression">space.vars.entity</code>
* **Related Object:** starts the <code class="expression">space.vars.automation</code> on a related <code class="expression">space.vars.entity</code>; select the relationship to traverse using the **Choose Related Object** dropdown
* **Record from Agentic Workflow Variable:** starts the <code class="expression">space.vars.automation</code> on a <code class="expression">space.vars.entity</code> identified by an <code class="expression">space.vars.automation</code> variable; select a compatible variable from the **Agentic Workflow Variable** dropdown
* **None (Global Agentic Workflow):** starts a global <code class="expression">space.vars.automation</code> with no associated <code class="expression">space.vars.entity</code>

**Resume Paused Agentic Workflows:** Available when **This Record** or **Related Object** is selected. When enabled, an existing paused execution on the target <code class="expression">space.vars.entity</code> is resumed rather than a new execution being created. When disabled, a new execution is always initiated.

## Modify Agentic Workflow

{% hint style="info" %}
**Note**: Global <code class="expression">space.vars.automations</code> cannot be targeted by Modify <code class="expression">space.vars.automations</code>.
{% endhint %}

The Modify <code class="expression">space.vars.automations</code> action changes the execution state of one or more <code class="expression">space.vars.automations</code> running on a related or variable-identified <code class="expression">space.vars.entity</code>. When configuring the step, choose between two operations: **Pause** or **Cancel**.

<div data-with-frame="true"><figure><img src="/files/rMTLQLSgbZvg2DifeNLw" alt="" width="245"><figcaption></figcaption></figure></div>

## Pause Agentic Workflow

The Pause <code class="expression">space.vars.automation</code> action suspends a running <code class="expression">space.vars.automation</code>. The scope options allow pausing the current <code class="expression">space.vars.automation</code> or another <code class="expression">space.vars.automation</code> running on a related <code class="expression">space.vars.entity</code> or a <code class="expression">space.vars.entity</code> identified from a variable.

<div data-with-frame="true"><figure><img src="/files/Zh4ICpA7fRwuUYixRj9Y" alt="" width="250"><figcaption></figcaption></figure></div>

## Cancel Agentic Workflow

The Cancel <code class="expression">space.vars.automation</code> action cancels a running or paused <code class="expression">space.vars.automation</code>. The scope options allow cancelling the current <code class="expression">space.vars.automation</code> or another <code class="expression">space.vars.automation</code> running on a related <code class="expression">space.vars.entity</code> or a <code class="expression">space.vars.entity</code> identified from a variable. Canceled executions cannot be resumed; if the <code class="expression">space.vars.automation</code> needs to run again on the same <code class="expression">space.vars.entity</code>, a new execution must be initiated.

<div data-with-frame="true"><figure><img src="/files/d9IRybps5E0CCrPFBP8F" alt="" width="248"><figcaption></figcaption></figure></div>

## Go To Agentic Workflow Step

The **Go To Agentic Workflow Step** action redirects execution to a different step within the current <code class="expression">space.vars.automation</code>.&#x20;

<div data-with-frame="true"><figure><img src="/files/ChALKRHJ6QnFk7ZXOZUT" alt="" width="249"><figcaption></figcaption></figure></div>

Steps are grouped by type in the dropdown (for example, triggers appear under a **Triggers** group header) and are listed in roughly left-to-right order as they appear in the <code class="expression">space.vars.automation</code> builder. The target can be any step type: a trigger, a condition, or another action.

There is a structural constraint to be aware of: a **Go To Agentic Workflow Step** action cannot have steps placed linearly after it in the same execution path. If steps exist after a Go To <code class="expression">space.vars.automation</code> Step, the builder requires that those subsequent steps either be removed or that the Go To <code class="expression">space.vars.automation</code> Step itself be placed inside a parallel branch. This action is primarily useful for creating loop-like patterns within a single <code class="expression">space.vars.automation</code>.

{% hint style="info" %}
**Note**: This action does not include error handling configuration.
{% endhint %}

## Update Variable

The Update Variable action updates the value of an existing variable during execution.&#x20;

<div data-with-frame="true"><figure><img src="/files/kIXKa2Hizj0Ed0k22K9f" alt="" width="259"><figcaption></figcaption></figure></div>

**Variable selection:** Use the **Choose Variable** dropdown to select the variable to update. Only variables already defined on the <code class="expression">space.vars.automation</code> are available. If no variables have been defined, the dropdown displays **No Options**.

<div data-with-frame="true"><figure><img src="/files/Y8HICrFbZv4fEo6CJRUi" alt="" width="563"><figcaption></figcaption></figure></div>

**Set Variable Source(s):** The **Source and Fallback Order** section is where value sources are configured. Use **+ ADD VARIABLE SOURCE** to add one or more sources. At the point this action runs, available sources are limited to fields on the context <code class="expression">space.vars.entity</code> or other variables. Trigger-based sources are no longer available because the trigger has already been evaluated when the <code class="expression">space.vars.automation</code> started.

**Static Value Fallback:** The **Static Value Fallback** section contains a **Static (Default)** entry with an **Enable Static Fallback Value** toggle. When enabled, the static value is used if all configured sources resolve to blank.

<div data-with-frame="true"><figure><img src="/files/k0t2dN2zakCuBSNiZjf9" alt="" width="563"><figcaption></figcaption></figure></div>

**Error handling:** This step includes a **Consider empty value an error (Required)** toggle.

When enabled, the step treats a blank resolved value as a failure and triggers the configured error handling behavior rather than writing a blank value to the variable.

<div data-with-frame="true"><figure><img src="/files/WPCqxlmHSuo49E7xzbNs" alt="" width="563"><figcaption></figcaption></figure></div>

The step also includes the standard **Error Handling** configuration. See [Agentic Workflow Error Handling](/docs/concepts/agentic-workflows/agentic-workflow-actions/agentic-workflow-error-handling).

## Stop Execution

The Stop Execution action terminates the current execution and sets it to a specified terminal state.

<div data-with-frame="true"><figure><img src="/files/z5oPKAQRbXQIhN4RH7NB" alt="" width="254"><figcaption></figcaption></figure></div>

&#x20;Use the **Action Options** dropdown to select one of the following:

* Stop and mark as Failed
* Stop and mark as Successfully Completed
* Stop and mark as Cancelled
* Pause and Error
* Pause

A **Send Notification** toggle is available alongside the action selection. When enabled, a notification is sent when the stop action executes.

This action is most useful inside branches where one path should reach a defined terminal state without continuing. For example, if a required condition is not met early in a flow, a Stop Execution step on the no path can mark the execution as failed immediately, without leaving that branch empty or requiring additional steps to reach a natural end.

{% hint style="info" %}
**Note**: This action does not include error handling configuration.
{% endhint %}

## Code Step

Code steps allow custom logic to be executed within an <code class="expression">space.vars.automation</code> using a sandboxed runtime environment. For full documentation, see [Agentic Workflow Code Steps](/docs/concepts/agentic-workflows/automation-code-steps).

<div data-with-frame="true"><figure><img src="/files/DunoygT6D1RKClQcsVDW" alt="" width="257"><figcaption></figcaption></figure></div>

***

## Key Use Cases

<code class="expression">space.vars.automation</code> control actions are applicable across any <code class="expression">space.vars.workflow</code> that requires coordination between multiple <code class="expression">space.vars.automations</code>, conditional termination, or dynamic variable management. The following examples illustrate common patterns in three industries where execution control is a core operational requirement.

### Industry examples

{% tabs %}
{% tab title="Insurance" %}
Insurance operations often span multiple <code class="expression">space.vars.automations</code> running across related records, including policy records, claim records, and <code class="expression">space.vars.contact</code> <code class="expression">space.vars.entities</code>, that must be coordinated as a case progresses.

Examples include:

* Starting a claims adjudication <code class="expression">space.vars.automation</code> on a related claim record when a policy <code class="expression">space.vars.automation</code> detects a new claim submission
* Pausing a renewal outreach <code class="expression">space.vars.automation</code> when a policyholder record enters a disputed status, and resuming it when the dispute is resolved
* Using Stop Execution to mark a compliance review <code class="expression">space.vars.automation</code> as failed when a required field is missing at a critical checkpoint, rather than allowing it to continue in an incomplete state
* Using Update Variable mid-execution to capture the current adjuster assignment before routing to a branch that may reassign it

How <code class="expression">space.vars.automation</code> control actions help:

* Coordinate work across policy, claims, and <code class="expression">space.vars.contact</code> <code class="expression">space.vars.entities</code> without building a single monolithic <code class="expression">space.vars.automation</code>
* Enforce process gates by terminating executions that cannot proceed due to missing or invalid data
* Preserve execution state across pause-and-resume cycles, supporting workflows with human-in-the-loop review steps
* Keep variable values accurate throughout long-running executions that span multiple decision points
  {% endtab %}

{% tab title="Healthcare" %}
Healthcare workflows frequently involve parallel processes running across patient, provider, and authorization <code class="expression">space.vars.entities</code> that must be started, paused, or stopped based on clinical events.

Examples include:

* Starting a prior authorization follow-up <code class="expression">space.vars.automation</code> on a related authorization <code class="expression">space.vars.entity</code> when a patient intake <code class="expression">space.vars.automation</code> reaches a specific stage
* Canceling all pending outreach <code class="expression">space.vars.automations</code> on a patient <code class="expression">space.vars.entity</code> when the patient is marked as discharged or transferred
* Using Go To <code class="expression">space.vars.automation</code> Step to loop a document collection <code class="expression">space.vars.automation</code> back to a waiting state until all required documents are received
* Using Stop Execution to mark an onboarding <code class="expression">space.vars.automation</code> as successfully completed once all enrollment steps are confirmed, preventing downstream steps from running unnecessarily

How <code class="expression">space.vars.automation</code> control actions help:

* Launch downstream <code class="expression">space.vars.automations</code> on related <code class="expression">space.vars.entities</code> at precisely the right point in the patient workflow without manual triggering
* Cancel irrelevant in-flight <code class="expression">space.vars.automations</code> when a patient's status changes, preventing stale processes from continuing
* Model waiting and retry patterns within a single <code class="expression">space.vars.automation</code> using loop logic rather than building separate <code class="expression">space.vars.automations</code> for each retry state
* Enforce clean terminal states on completed workflows so execution history accurately reflects outcomes
  {% endtab %}

{% tab title="Financial Services" %}
Financial services <code class="expression">space.vars.workflows</code>, including loan origination, onboarding, and compliance reviews, often involve sequential and parallel <code class="expression">space.vars.automations</code> across account, application, and <code class="expression">space.vars.contact</code> <code class="expression">space.vars.entities</code> that must be tightly coordinated.

Examples include:

* Starting a compliance review <code class="expression">space.vars.automation</code> on a related account <code class="expression">space.vars.entity</code> when a loan application <code class="expression">space.vars.automation</code> reaches the underwriting stage
* Using Stop Execution to mark a loan application <code class="expression">space.vars.automation</code> as canceled when an applicant withdraws, rather than leaving the execution in an indeterminate state
* Pausing a renewal <code class="expression">space.vars.automation</code> when a client <code class="expression">space.vars.entity</code> enters a legal hold status, and resuming it once the hold is lifted
* Using Update Variable to capture an intermediate calculation result, such as a debt-to-income ratio, before routing to a branch that applies different logic based on that value

How <code class="expression">space.vars.automation</code> control actions help:

* Orchestrate multi-<code class="expression">space.vars.automation</code> <code class="expression">space.vars.workflows</code> across application, account, and <code class="expression">space.vars.contact</code> <code class="expression">space.vars.entities</code> without coupling all logic into a single <code class="expression">space.vars.automation</code>
* Enforce regulatory and process gates by terminating or pausing executions when required conditions are not met
* Maintain accurate execution history by explicitly setting terminal states rather than allowing executions to end ambiguously
* Pass computed values forward through long-running <code class="expression">space.vars.workflows</code> using variable updates, reducing redundant recalculation across steps
  {% endtab %}
  {% endtabs %}

***

## What's Next?

Continue to [Field Actions](/docs/concepts/agentic-workflows/agentic-workflow-actions/agentic-workflow-field-actions) to learn how to update and clear field values on the context <code class="expression">space.vars.entity</code> and perform arithmetic operations on numeric fields and variables or check out any of the topics below:

<details>

<summary>Related Topics</summary>

* [Field Actions](/docs/concepts/agentic-workflows/agentic-workflow-actions/agentic-workflow-field-actions)
* [Related Object Actions](/docs/concepts/agentic-workflows/agentic-workflow-actions/agentic-workflow-related-object-actions)
* [Team Actions](/docs/concepts/agentic-workflows/agentic-workflow-actions/agentic-workflow-team-actions)
* [Integration Actions](/docs/concepts/agentic-workflows/agentic-workflow-actions/agentic-workflow-integration-actions)
* [Messages Actions](/docs/concepts/agentic-workflows/agentic-workflow-actions/agentic-workflow-messages-actions)

</details>




---

[Next Page](/llms-full.txt/1)

