---
title: "Return all publicly visible global apps"
method: GET
path: "/v1/app"
tags: ["app"]
---

# Return all publicly visible global apps

`GET /v1/app`

## Query parameters

- `tag` string
- `from` string
- `limit` integer

## Response `200`

successful operation

- ResultsApp
  - `data` App[], required
    - `id` string, required — globally unique id
    - `orgId` string, required — organization id
    - `name` string, required — short unique name
    - `redirectUris` string[] — list of acceptable Oauth2 redirect URIs, if Oauth2 is supported for this app
    - `oauthClientIds` string[] — OAuth client identities allowed to connect as this agent over MCP. Each entry is either a full Client ID Metadata Document (CIMD) URL (matched exactly, e.g. Claude Code's fixed URL) or a bare host (matched against the client_id's host, e.g. chatgpt.com, for clients whose CIMD URL varies per server).
    - `mcpInstructions` string — Connection instructions shown on the agent's MCP tab (e.g. how to add this MCP server to a client like Claude Code). The literal token {{mcpUrl}} is replaced with the org-specific MCP server URL when displayed.
    - `allowedIps` string[] — allowlist of IPs or IP ranges that are allowed to make API calls on behalf of this app
    - `configFields` AppConfigField[] — list of configuration fields
      - `name` string, required
      - `label` string, required
      - `type` 'STRING' | 'SUBDOMAIN' | 'URL' | 'SECRET' | 'XML' | 'OAUTH' | 'INSTRUCTION' | 'BOOLEAN', required
      - `details` string
      - `subdomain` string
      - `optional` boolean
      - `configSection` string
      - `oauthUrl` string, uri
      - `requiredFields` string[]
    - `title` string, required — human-readable name of app
    - `summary` string, required — short summary of app
    - `description` string — full description of app, in Markdown
    - `setupInstructions` string — setup instructions, in Markdown
    - `cronOrder` integer — execution order of the cron (lower numbers execute earlier)
    - `cronSchedule` 'DAILY' | 'WEEKLY' — cron schedule
    - `cronDayOfWeek` 'MONDAY' | 'TUESDAY' | 'WEDNESDAY' | 'THURSDAY' | 'FRIDAY' | 'SATURDAY' | 'SUNDAY' — Day of week if cronSchedule is WEEKLY
    - `imagePath` string — path to avatar profile image, should be approximately square dimensions and show logo
    - `wordmarkImagePath` string — path to larger profile logo image containing brand wordmark, does not need to be square dimensions
    - `poweredByImagePath` string — path to powered by image, should be approximately square dimensions and show logo
    - `status` 'GLOBAL' | 'ACTIVE' | 'INACTIVE' | 'DEVELOPMENT', required — current status of app
    - `minAccess` 'NONE' | 'PREBOARDING' | 'VIEW' | 'LIMITED' | 'MEMBER_LIMITED_COMP' | 'MEMBER' | 'CUSTOM' | 'TECH_OWNER' | 'TIMEOFF' | 'CONTACT' | 'COMP_CASH' | 'COMP_EQUITY' | 'COMP_ALL' | 'RECRUIT_SENSITIVE' | 'RECRUIT_PRIMARY' | 'SENSITIVE_LIMITED_COMP' | 'SENSITIVE' | 'PRIMARY' | 'PEOPLE_OPS_ADMIN' | 'PEOPLE_OPS_ADMIN_NO_COMP_DATA' | 'PEOPLE_OPS_ADMIN_NO_SENSITIVE_DATA' | 'OWNER', required — minimum access level requested by app
    - `roleId` string — roleId requested by app
    - `eventNotifyUrl` string, uri — URL that should be notified on events
    - `payload` object — custom payload to send in lieu of regular payload
    - `events` string[] — set of events to notify on
    - `type` 'AGENT' | 'APP' | 'BUNDLE' | 'INTERNAL' — APP, BUNDLE, or INTERNAL
    - `bundle` Bundle
      - `categories` Category[] — list of categories included in this bundle
        - `id` string, required — globally unique id
        - `orgId` string — parent organization id (empty if built-in)
        - `label` string, required — human-readable label of category
        - `fieldIds` string[] — set of field ids included in this category
        - `nativeFields` string[] — set of native field names included in this category
        - `createId` string — created by user id
        - `createBehalfId` string — created on behalf of user id
        - `createAttribution` Attribution
          - `principalUserId` string
          - `agentUserIds` string[]
          - `eventId` string
          - `aiChatId` string
          - `aiToolUseId` string
          - `channel` 'WEB' | 'MOBILE' | 'SLACK' | 'TEAMS' | 'MCP'
        - `createAt` string — created timestamp
        - `updateId` string — last updated by user id
        - `updateBehalfId` string — last updated on behalf of user id
        - `updateAttribution` Attribution
          - `principalUserId` string
          - `agentUserIds` string[]
          - `eventId` string
          - `aiChatId` string
          - `aiToolUseId` string
          - `channel` 'WEB' | 'MOBILE' | 'SLACK' | 'TEAMS' | 'MCP'
        - `updateAt` string — last updated timestamp
        - `deleteId` string — deleted by user id
        - `deleteBehalfId` string — deleted on behalf of user id
        - `deleteAttribution` Attribution
          - `principalUserId` string
          - `agentUserIds` string[]
          - `eventId` string
          - `aiChatId` string
          - `aiToolUseId` string
          - `channel` 'WEB' | 'MOBILE' | 'SLACK' | 'TEAMS' | 'MCP'
        - `deleteAt` string — deleted timestamp
      - `fields` PartialField[] — list of fields included in this bundle
        - `id` string — globally unique id
        - `orgId` string — parent organization id (empty if global)
        - `name` string — short field name
        - `label` string — human-readable full name of field
        - `labelTr` Translations
          - `values` object, required
        - `description` string — description of field
        - `inUse` boolean — disallow any updates to this Field (except for field.question string)
        - `expr` string — calculated expression
        - `exprType` 'ADDRESS' | 'AUDIO' | 'BOOLEAN' | 'COMP' | 'COMPOUND' | 'COMP_BAND' | 'CONTACTS' | 'CURRENCY' | 'DATE' | 'DECIMAL' | 'ELAPSED_DAYS' | 'ELAPSED_MONTHS' | 'ELAPSED_YEARS' | 'EMAIL' | 'ENUM' | 'ENUM_EXPR' | 'ENUM_MULTI' | 'ENUM_SCALE' | 'EXPR' | 'FILE' | 'GROUP' | 'GROUPS' | 'GROUP_ASSIGNMENTS' | 'GROUP_TYPE' | 'GROUP_POSITION_ASSIGNMENTS' | 'IMAGE' | 'INTEGER' | 'JOB' | 'JOB_CODE' | 'JOBS' | 'JOB_TIER' | 'LIST' | 'MAP' | 'MONEY' | 'NAME' | 'OBJECT' | 'PAY_INTERVAL' | 'PERCENT' | 'PERSON' | 'PERSONS' | 'PHONE' | 'STOCKGRANT' | 'STRING' | 'TABLE_REF' | 'TEXT' | 'TIMEOFF' | 'TIMESTAMP' | 'TRACKED_GROUP' | 'URL' | 'USER' | 'VARIABLE_COMP' | 'VARIABLE_COMPS' — the expected type of the evaluated expression
        - `type` 'ADDRESS' | 'AUDIO' | 'BOOLEAN' | 'COMP' | 'COMPOUND' | 'COMP_BAND' | 'CONTACTS' | 'CURRENCY' | 'DATE' | 'DECIMAL' | 'ELAPSED_DAYS' | 'ELAPSED_MONTHS' | 'ELAPSED_YEARS' | 'EMAIL' | 'ENUM' | 'ENUM_EXPR' | 'ENUM_MULTI' | 'ENUM_SCALE' | 'EXPR' | 'FILE' | 'GROUP' | 'GROUPS' | 'GROUP_ASSIGNMENTS' | 'GROUP_TYPE' | 'GROUP_POSITION_ASSIGNMENTS' | 'IMAGE' | 'INTEGER' | 'JOB' | 'JOB_CODE' | 'JOBS' | 'JOB_TIER' | 'LIST' | 'MAP' | 'MONEY' | 'NAME' | 'OBJECT' | 'PAY_INTERVAL' | 'PERCENT' | 'PERSON' | 'PERSONS' | 'PHONE' | 'STOCKGRANT' | 'STRING' | 'TABLE_REF' | 'TEXT' | 'TIMEOFF' | 'TIMESTAMP' | 'TRACKED_GROUP' | 'URL' | 'USER' | 'VARIABLE_COMP' | 'VARIABLE_COMPS' — type of field
        - `plural` 'SINGLE' | 'LIST' | 'SET' — plural type of the field (either SINGLE, LIST, or SET)
        - `values` EnumValue[] — possible values (enum type only)
          - `name` string, required — enum value name
          - `label` string, required — enum value label
          - `color` string — color of property
          - `expr` string — computed expression, for ENUM_EXPR type
          - `num` number — numeric value, for ENUM_SCALE type
          - `sort` integer — sort order
          - `rank` integer — rank order, if selected in rank order
          - `id` string — unique identifier for enum
          - `labelTr` Translations
            - `values` object, required
        - `defaultValue` object — default value if field is not set
        - `options` FieldOptions
          - `min` string — minimum value, for numeric and date fields
          - `max` string — maximum value, for numeric and date fields
          - `minItems` integer
          - `maxItems` integer
          - `stackRank` boolean
          - `step` number
          - `enableEditDialog` boolean
          - `requiredJobField` boolean
          - `excludeTargetPersonId` boolean
          - `maxLength` integer
          - `readOnly` boolean
          - `includeFormer` boolean
          - `effectiveDated` boolean
          - `unique` boolean
          - `required` boolean
        - `entityType` 'JOB' | 'JOB_OPEN' | 'JOB_FILLED' | 'PERSON' | 'CHANGE' | 'TABLE' | 'ORG' | 'USER' | 'NONE' — entity type of field
        - `sensitive` 'GLOBAL' | 'ORG' | 'SENSITIVE' | 'PERSONAL' | 'MANAGER' | 'HIGH' | 'PRIVATE' — sensitivity level of data
        - `hideExpr` boolean — hide expression-derived values from non-sensitive users
        - `expireDays` integer — number of days after which the data becomes invalid
        - `status` 'ACTIVE' | 'HIDDEN' — the status of the field
        - `tableId` string — the table id this field applies to, only applicable when EntityType equals TABLE
        - `sort` integer — sort order within a table
        - `tableRef` TableRef
          - `tableId` string — the table id this field references
          - `tableName` string — the table name this field references
        - `isUnique` boolean — indicates that this field value is unique in conjunction with entityType PERSON or JOB
        - `isRequired` boolean — indicates that this field value is required
        - `isEffectiveDated` boolean — indicates that this field value is effective-dated
        - `dataFetchTypes` string[] — set of data fetch types
        - `aliases` string[] — set of aliases for this field
        - `groupTypeId` string — if this is a group membership field, the group type ID it's for
        - `calc` 'ADDRESS' | 'AGE' | 'ANNIVERSARY' | 'ANNUAL_BASE_MONEY' | 'BACKFILL' | 'BAND' | 'BAND_RANGE' | 'BASE' | 'BASE_CAL_YEAR_PRORATED' | 'BASE_CAL_YTD' | 'BASE_COMP' | 'BASE_COMP_AMOUNT' | 'BASE_COMP_ANNUALIZED' | 'BASE_COMP_ANNUALIZED_AS_ORG_CURRENCY' | 'BASE_COMP_AS_ORG_CURRENCY' | 'BASE_COMP_CHANGES' | 'BASE_COMP_CURRENCY' | 'BASE_COMP_HOURS_PER_WEEK' | 'BASE_COMP_INTERVAL' | 'BASE_COMP_LAST_RAISE_DATE' | 'BASE_COMP_LAST_RAISE_MONTHS_SINCE' | 'BASE_COMP_LAST_RAISE_PAY' | 'BASE_COMP_LAST_RAISE_PAY_AS_ORG_CURRENCY' | 'BASE_COMP_LAST_RAISE_PERCENT' | 'BASE_COMP_LAST_RAISE_TYPE' | 'BASE_COMP_PAY' | 'BASE_COMP_PAY_AS_ORG_CURRENCY' | 'BASE_COMP_WEEKS_PER_YEAR' | 'BASE_FISCAL_YEAR_PRORATED' | 'BASE_FISCAL_YTD' | 'BASE_PRIMARY' | 'BASE_RAISE_AMOUNT' | 'BASE_RAISE_DATE' | 'BASE_RAISE_PERCENT' | 'BIRTH_DATE' | 'BIRTHDAY' | 'BONUS_TARGET' | 'BUDGET_COST' | 'BUSINESS_UNITS' | 'CAL_YEAR_VEST_SHARES' | 'CAL_YEAR_VEST_VALUE' | 'CAN_APPROVE_CHANGE' | 'CAN_EDIT_JOB' | 'CASH_COMP' | 'CASH_COMP_LOCAL' | 'CHANGE' | 'CHANGE_ID' | 'COMMISSION_TARGET' | 'COMP' | 'COMP_CHANGE_PERCENT' | 'COMPA_RATIO_MID' | 'COMPA_RATIO_TARGET' | 'CONTACT' | 'CONTACTS' | 'COST' | 'CREATE_DATE' | 'CURRENCY' | 'DATA' | 'DATE' | 'DATE_OF' | 'DAYS_ACTIVE' | 'DAYS_OFF' | 'DAYS_OFF_TAKEN' | 'DAYS_OFF_UPCOMING' | 'DAYS_OPEN' | 'DB' | 'DEPART' | 'DEPARTMENT' | 'DEPARTMENT_FUNC' | 'DIRECT_JOBS' | 'DIRECT_JOB_COUNT' | 'DIRECT_PERSON_COUNT' | 'DIRECT_PERSONS' | 'EMPLOYMENT' | 'END_DATE_JOB' | 'END_DATE_ORG' | 'ETHNICITY' | 'FISCAL_YEAR_COST' | 'GENDER' | 'GEOIP' | 'GEOIP_ADDRESS' | 'GRAND_MANAGER' | 'GRANT_SHARES' | 'GRANT_TYPE' | 'GRANT_VALUE' | 'GRANTS' | 'GROUP_IDS' | 'GROUPS_BY_TYPE' | 'GROUP_GOALS' | 'HEADCOUNT' | 'HISTORIC_BACKFILL' | 'HOUR' | 'HOURLY' | 'HOURLY_PRIMARY' | 'HOURS_PER_WEEK' | 'IMAGE' | 'INDIRECT' | 'INDIRECT_JOBS' | 'JOB' | 'JOB_ID' | 'JOB_CODE' | 'JOBCOUNT' | 'LAST_GRANT' | 'LAST_GRANT_DATE' | 'LAST_GRANT_ORIGINAL_VALUE' | 'LOCATION' | 'MANAGE_JOBS' | 'MANAGE_PERSONS' | 'MANAGER' | 'MANAGER_COUNT' | 'MANAGER_FILLED' | 'MANAGER_ID' | 'MANAGERS' | 'MANAGER_PERSON' | 'MANAGER_PERSONS' | 'ME' | 'MERGE_SCENARIO_ID' | 'NAME' | 'NAME_AUDIO' | 'NAME_TITLE' | 'NEXT_DAY_OFF' | 'NEXT_TIME_OFF' | 'NEXT_YEAR_VEST_SHARES' | 'NEXT_YEAR_VEST_VALUE' | 'NOTE' | 'NOOP' | 'OPEN' | 'ORG' | 'OWNER_GOALS' | 'PERSON' | 'PERSON_ID' | 'PLACEMENT' | 'PREV_DAY_OFF' | 'PREV_TIME_OFF' | 'PROMOTION' | 'PROMOTION_DATE' | 'PROPOSED' | 'Q' | 'RAISE_AMOUNT' | 'RAISE_DATE' | 'RAISE_PERCENT' | 'RAISE_PROMOTION_DATE' | 'REASON' | 'REGRET' | 'RELATIONSHIPS' | 'REMOTE_WORK_ADDRESS' | 'SCENARIO' | 'SCENARIO_CHANGED' | 'SENSITIVE' | 'SENSITIVE_FIELDS' | 'START_DATE' | 'START_DATE_JOB' | 'START_DATE_ORG' | 'START_DATE_LIFETIME' | 'START_DATE_PLANNED' | 'STATE' | 'STRIKE_PRICE' | 'SUPPORTER_GOALS' | 'TARGET_HOURS_PER_WEEK' | 'TARGET_WEEKS_PER_YEAR' | 'TEAM' | 'TENURE_JOB' | 'TENURE_ORG' | 'TENURE_LIFETIME' | 'TIMEZONE_OFFSET' | 'TITLE' | 'TITLE_DATE' | 'TODAY' | 'TOTAL_COMP' | 'TOTAL_COMP_LOCAL' | 'TOTAL_ORG_SHARES' | 'TOTAL_SHARES' | 'TOTAL_SHARES_VALUE' | 'UNDER_JOBS' | 'UNVESTED_SHARES' | 'UNVESTED_VALUE' | 'UPDATE' | 'USER_ACTIVE_DAYS' | 'USER_ACTIVE_DAYS_CONSECUTIVE' | 'USER_CAN_EDIT_COMP_FOR_JOB' | 'USER' | 'VARIABLE' | 'VARIABLE_AMOUNT' | 'VARIABLE_INTERVAL' | 'VARIABLE_PERCENT' | 'VARIABLE_PRIMARY' | 'VARIABLE_TARGET' | 'VARIABLE_TARGET_AMOUNT' | 'VARIABLE_TARGET_ANNUALIZED' | 'VARIABLE_TARGET_CURRENCY' | 'VARIABLE_TARGET_PERCENT' | 'VARIABLE_TARGET_TYPE' | 'VARIABLE_TARGETS' | 'VARIABLE_TARGETS_LAST_RAISE_DATE' | 'VARIABLE_TARGETS_LAST_RAISE_MONTHS_SINCE' | 'VARIABLE_TARGETS_LAST_RAISE_PAY' | 'VARIABLE_TARGETS_LAST_RAISE_PERCENT' | 'VARIABLE_COMP_CHANGES' | 'VARIABLE_TYPE' | 'VESTED_DATE' | 'VESTED_SHARES' | 'VESTED_VALUE' | 'WEEKS_PER_YEAR' | 'WORK_ADDRESS' | 'UPCOMING' — unique ID for the function that runs to calculate the value of this field. For native fields only
        - `categoryId` string — ID of the category to which this field belongs, if any
        - `classification` 'COMPOUND' — indicates how this field is calculated (whether it's stored in the DB, evaluated through the expression service, or compound)
        - `places` integer — number of decimal places for numeric values
        - `isAutoIncrement` boolean — whether this field should auto-increment. For unique STRING or INT fields only
        - `autoIncConfig` AutoIncFieldConfig
          - `upperCase` boolean, required — convert any lower-case characters in the value to upper case
          - `padDigits` integer, required — length of the numeric part of the value (left-padded with zeroes)
          - `separator` 'HYPHEN' | 'UNDERSCORE' | 'SPACE' | 'NONE', required — separator character to use between parts of the value
          - `prefixParts` AutoIncFieldPart[], required
            - `type` 'LITERAL_STRING' | 'GROUP_CODE', required
            - `value` object, required
            - `defaultValue` string
        - `shouldAutoAddValue` boolean — Whether the values for ENUM or ENUM_MULTI field can be added automatically by syncs and CSV imports
        - `createId` string — created by user id
        - `createBehalfId` string — created on behalf of user id
        - `createAttribution` Attribution
          - `principalUserId` string
          - `agentUserIds` string[]
          - `eventId` string
          - `aiChatId` string
          - `aiToolUseId` string
          - `channel` 'WEB' | 'MOBILE' | 'SLACK' | 'TEAMS' | 'MCP'
        - `createAt` string — created timestamp
        - `updateId` string — last updated by user id
        - `updateBehalfId` string — last updated on behalf of user id
        - `updateAttribution` Attribution
          - `principalUserId` string
          - `agentUserIds` string[]
          - `eventId` string
          - `aiChatId` string
          - `aiToolUseId` string
          - `channel` 'WEB' | 'MOBILE' | 'SLACK' | 'TEAMS' | 'MCP'
        - `updateAt` string — last updated timestamp
        - `deleteId` string — deleted by user id
        - `deleteBehalfId` string — deleted on behalf of user id
        - `deleteAttribution` Attribution
          - `principalUserId` string
          - `agentUserIds` string[]
          - `eventId` string
          - `aiChatId` string
          - `aiToolUseId` string
          - `channel` 'WEB' | 'MOBILE' | 'SLACK' | 'TEAMS' | 'MCP'
        - `deleteAt` string — deleted timestamp
      - `forms` PartialForm[] — list of forms included in this bundle
        - `id` string — globally unique id
        - `orgId` string — parent organization id
        - `label` string — human-readable full name of form
        - `displayName` string — display name of form during completion
        - `displayNameTr` Translations
          - `values` object, required
        - `description` string — description of form
        - `blocks` FormBlock[] — ordered list of blocks being collected in this form
          - `id` string — unique id for the block
          - `fieldName` string — field code name
          - `type` 'QUESTION' | 'CONTENT', required — Type of Form Block
          - `content` string — Content of Content Block
          - `contentTr` Translations
            - `values` object, required
          - `required` boolean — whether field is required or not
          - `questionId` string — question id, for questions
          - `filter` string — Filter to apply on visibility of this block
        - `status` 'ACTIVE' | 'INACTIVE' | 'ARCHIVED' — status of the form
        - `type` 'BUILT_IN' | 'CUSTOM' — type of the form
        - `targetType` 'NONE' | 'PERSON' — target type that the form can be filled out about
        - `targetFilter` string — filter that controls on which profiles this tab will appear
        - `submitFilter` string — filter that controls which respondents can submit this form. The form:submit permission, if present, overrides this filter
        - `responseReadFilter` string — filter that controls who can read the form responses. The formResponse:read permission, if present, overrides this filter
        - `approval` 'MANAGER' | 'GRAND_MANAGER' — approval needed, if any approval is required
        - `release` 'SUBMITTER' | 'ADMIN' — whether a release step is involved (subsequent to approval if any)
        - `releaseMessageChannel` MessageChannelConfig
          - `channels` string[], required
          - `alwaysEmail` boolean, required
        - `share` 'SUBMITTER' | 'ADMIN' — whether sharing form responses is allowed
        - `shareMessageChannel` MessageChannelConfig
          - `channels` string[], required
          - `alwaysEmail` boolean, required
        - `autoShare` AutoShare[] — list of automatic sharing to be done after submission
          - `access` 'NONE' | 'LIMITED_READ' | 'LIMITED_WRITE' | 'STANDARD_READ' | 'STANDARD_WRITE' | 'COMPENSATION_READ' | 'FULL_READ' | 'COMP_PLANNING_PARTICIPANT' | 'COMPENSATION_WRITE' | 'WRITE' | 'COMPENSATION_OWNER' | 'OWNER', required
          - `shareWith` string, required
        - `autoShareMessageChannel` MessageChannelConfig
          - `channels` string[], required
          - `alwaysEmail` boolean, required
        - `submitterEdit` FormEditAccess
          - `allow` 'ALWAYS' | 'WHILE_PROPOSED' | 'UNTIL_ACTIVE' | 'WHILE_ASSESSMENT_ACTIVE' | 'TIME_LIMIT'
          - `timeLimitSecs` integer
        - `approverEdit` FormEditAccess
          - `allow` 'ALWAYS' | 'WHILE_PROPOSED' | 'UNTIL_ACTIVE' | 'WHILE_ASSESSMENT_ACTIVE' | 'TIME_LIMIT'
          - `timeLimitSecs` integer
        - `signature` FormSignatureConfig
          - `signers` string[], required
          - `messageChannel` MessageChannelConfig
            - `channels` string[], required
            - `alwaysEmail` boolean, required
          - `message` string
          - `dueDate` DueDate
            - `type` 'EXACT' | 'RELATIVE', required
            - `dueDay` string, required — due day, in either relative (-7d) or exact (YYYY-MM-DD) format
            - `dueTime` string, required — due time, which is a LocalTime
          - `isSkippable` boolean
          - `fieldId` string
        - `authorSensitive` 'ANONYMOUS' | 'PRIVATE' | 'HIGH' | 'MANAGER' — view sensitivity for the author of this form - the level of view access required to view the createId and updateId fields. If null, the author's identity is always visible as long as the viewer can read the form response. If set to PRIVATE, the author's identity is stored in ChartHop, but protected such that even users with sensitive access cannot access the data. If set to ANONYMOUS, the author's identity is not stored in ChartHop at all.
        - `options` FormOptions
          - `notifySubmitter` boolean
          - `notifySubmitterManager` boolean
          - `notifySelf` boolean
          - `notifyManager` boolean
          - `notifyUserIds` string[]
          - `fillValues` boolean
          - `enableDraft` boolean
          - `peersField` string
          - `enableExport` boolean
          - `timeToEdit` string
          - `endDate` string
        - `completeMode` 'MODAL' | 'FULLSCREEN' — appearance of the form during completion
        - `ai` FormAiConfig
          - `enableRead` boolean, required
          - `enableWrite` boolean, required
          - `agentUserId` string
          - `instructions` string
          - `label` string
          - `agentSubmit` 'CHAT' | 'AUTO' — whether AI agents are allowed to submit this form: null/absent (never), CHAT (only when in an interactive chat with a human), AUTO (also when running autonomously). Defaults to never.
        - `createId` string — created by user id
        - `createBehalfId` string — created on behalf of user id
        - `createAttribution` Attribution
          - `principalUserId` string
          - `agentUserIds` string[]
          - `eventId` string
          - `aiChatId` string
          - `aiToolUseId` string
          - `channel` 'WEB' | 'MOBILE' | 'SLACK' | 'TEAMS' | 'MCP'
        - `createAt` string — created timestamp
        - `updateId` string — last updated by user id
        - `updateBehalfId` string — last updated on behalf of user id
        - `updateAttribution` Attribution
          - `principalUserId` string
          - `agentUserIds` string[]
          - `eventId` string
          - `aiChatId` string
          - `aiToolUseId` string
          - `channel` 'WEB' | 'MOBILE' | 'SLACK' | 'TEAMS' | 'MCP'
        - `updateAt` string — last updated timestamp
        - `deleteId` string — deleted by user id
        - `deleteBehalfId` string — deleted on behalf of user id
        - `deleteAttribution` Attribution
          - `principalUserId` string
          - `agentUserIds` string[]
          - `eventId` string
          - `aiChatId` string
          - `aiToolUseId` string
          - `channel` 'WEB' | 'MOBILE' | 'SLACK' | 'TEAMS' | 'MCP'
        - `deleteAt` string — deleted timestamp
      - `questions` Question[] — list of questions included in this bundle
        - `id` string, required — globally unique id
        - `orgId` string — parent organization id (empty if global)
        - `question` string, required — text of the question
        - `questionTr` Translations
          - `values` object, required
        - `fieldId` string — if the question is linked to a field, the id of that field. Any question responses will be automatically saved to the field
        - `type` 'ADDRESS' | 'AUDIO' | 'BOOLEAN' | 'COMP' | 'COMPOUND' | 'COMP_BAND' | 'CONTACTS' | 'CURRENCY' | 'DATE' | 'DECIMAL' | 'ELAPSED_DAYS' | 'ELAPSED_MONTHS' | 'ELAPSED_YEARS' | 'EMAIL' | 'ENUM' | 'ENUM_EXPR' | 'ENUM_MULTI' | 'ENUM_SCALE' | 'EXPR' | 'FILE' | 'GROUP' | 'GROUPS' | 'GROUP_ASSIGNMENTS' | 'GROUP_TYPE' | 'GROUP_POSITION_ASSIGNMENTS' | 'IMAGE' | 'INTEGER' | 'JOB' | 'JOB_CODE' | 'JOBS' | 'JOB_TIER' | 'LIST' | 'MAP' | 'MONEY' | 'NAME' | 'OBJECT' | 'PAY_INTERVAL' | 'PERCENT' | 'PERSON' | 'PERSONS' | 'PHONE' | 'STOCKGRANT' | 'STRING' | 'TABLE_REF' | 'TEXT' | 'TIMEOFF' | 'TIMESTAMP' | 'TRACKED_GROUP' | 'URL' | 'USER' | 'VARIABLE_COMP' | 'VARIABLE_COMPS', required — datatype of the question
        - `plural` 'SINGLE' | 'LIST' | 'SET' — plural type of the question datatype (either SINGLE, LIST, or SET)
        - `values` EnumValue[] — possible values (enum type only)
          - `name` string, required — enum value name
          - `label` string, required — enum value label
          - `color` string — color of property
          - `expr` string — computed expression, for ENUM_EXPR type
          - `num` number — numeric value, for ENUM_SCALE type
          - `sort` integer — sort order
          - `rank` integer — rank order, if selected in rank order
          - `id` string — unique identifier for enum
          - `labelTr` Translations
            - `values` object, required
        - `places` integer — number of decimal places for numeric values
        - `options` FieldOptions
          - `min` string — minimum value, for numeric and date fields
          - `max` string — maximum value, for numeric and date fields
          - `minItems` integer
          - `maxItems` integer
          - `stackRank` boolean
          - `step` number
          - `enableEditDialog` boolean
          - `requiredJobField` boolean
          - `excludeTargetPersonId` boolean
          - `maxLength` integer
          - `readOnly` boolean
          - `includeFormer` boolean
          - `effectiveDated` boolean
          - `unique` boolean
          - `required` boolean
        - `createId` string — created by user id
        - `createBehalfId` string — created on behalf of user id
        - `createAttribution` Attribution
          - `principalUserId` string
          - `agentUserIds` string[]
          - `eventId` string
          - `aiChatId` string
          - `aiToolUseId` string
          - `channel` 'WEB' | 'MOBILE' | 'SLACK' | 'TEAMS' | 'MCP'
        - `createAt` string — created timestamp
        - `updateId` string — last updated by user id
        - `updateBehalfId` string — last updated on behalf of user id
        - `updateAttribution` Attribution
          - `principalUserId` string
          - `agentUserIds` string[]
          - `eventId` string
          - `aiChatId` string
          - `aiToolUseId` string
          - `channel` 'WEB' | 'MOBILE' | 'SLACK' | 'TEAMS' | 'MCP'
        - `updateAt` string — last updated timestamp
        - `deleteId` string — deleted by user id
        - `deleteBehalfId` string — deleted on behalf of user id
        - `deleteAttribution` Attribution
          - `principalUserId` string
          - `agentUserIds` string[]
          - `eventId` string
          - `aiChatId` string
          - `aiToolUseId` string
          - `channel` 'WEB' | 'MOBILE' | 'SLACK' | 'TEAMS' | 'MCP'
        - `deleteAt` string — deleted timestamp
      - `profileTabs` PartialProfileTab[] — list of profile tabs included in this bundle
        - `id` string — globally unique id
        - `orgId` string — parent organization id
        - `label` string — human-readable name of profile tab
        - `labelTr` Translations
          - `values` object, required
        - `blocks` Block[] — ordered list of blocks contained by profile tab
          - `type` 'CONTENT' | 'TASK' | 'CALENDAR' — the type of this block, or null if legacy
          - `label` string — human readable label for this block
          - `height` object — fixed height in px, or expand if “stretch”, or fit to contents if null
          - `targetFilter` string — filter condition expression applied to this block, used to determine whether the content appears on the target or not
          - `readFilter` string — filter condition expression applied to this block, relative to the viewer
          - `formIds` string[] — form ids to surface responses in this block
          - `fields` string[] — fields retrieved in this block
          - `title` string — title to show in block header
          - `content` string — template content returned in this block
          - `contentTr` Translations
            - `values` object, required
          - `primaryButton` LayoutButton
            - `url` string, required
            - `label` string, required
          - `secondaryButton` LayoutButton
            - `url` string, required
            - `label` string, required
        - `layout` Layout
          - `rows` LayoutRow[], required
            - `columns` LayoutColumn[], required
              - …
            - `format` string, required
        - `status` 'ACTIVE' | 'INACTIVE' — status of the profile tab
        - `targetFilter` string — filter that controls on which profiles this tab will appear
        - `readFilter` string — filter that controls which viewers can read this profile tab. The profileTab:read permission, if present, overrides this filter
        - `sort` integer — sort order
        - `createId` string — created by user id
        - `createBehalfId` string — created on behalf of user id
        - `createAttribution` Attribution
          - `principalUserId` string
          - `agentUserIds` string[]
          - `eventId` string
          - `aiChatId` string
          - `aiToolUseId` string
          - `channel` 'WEB' | 'MOBILE' | 'SLACK' | 'TEAMS' | 'MCP'
        - `createAt` string — created timestamp
        - `updateId` string — last updated by user id
        - `updateBehalfId` string — last updated on behalf of user id
        - `updateAttribution` Attribution
          - `principalUserId` string
          - `agentUserIds` string[]
          - `eventId` string
          - `aiChatId` string
          - `aiToolUseId` string
          - `channel` 'WEB' | 'MOBILE' | 'SLACK' | 'TEAMS' | 'MCP'
        - `updateAt` string — last updated timestamp
        - `deleteId` string — deleted by user id
        - `deleteBehalfId` string — deleted on behalf of user id
        - `deleteAttribution` Attribution
          - `principalUserId` string
          - `agentUserIds` string[]
          - `eventId` string
          - `aiChatId` string
          - `aiToolUseId` string
          - `channel` 'WEB' | 'MOBILE' | 'SLACK' | 'TEAMS' | 'MCP'
        - `deleteAt` string — deleted timestamp
      - `groups` PartialGroup[] — list of content groups included in this bundle
        - `id` string — globally unique id
        - `orgId` string — parent organization id
        - `name` string — unique name of group
        - `description` TextRef
          - `textId` string
          - `text` string
        - `slug` string — unique slug of group
        - `code` string — code of group
        - `type` GroupTypeRef
          - `id` string, required
          - `name` string
        - `parent` GroupRef
          - `id` string, required
          - `name` string
          - `type` string
        - `fields` object — fields containing custom data
        - `image` string — path to group image
        - `color` string — color of group
        - `aliases` string[] — aliases for group
        - `address` Address
          - `street1` string — street address, line 1
          - `street2` string — street address, line 2
          - `street3` string — street address, line 3
          - `city` string — city
          - `state` string — state
          - `country` string, required — country (two-digit ISO code)
          - `postal` string — postal code
          - `geo` Geopoint
            - `type` string, required — Type of point
            - `coordinates` number[], required — The longitude and latitude of the point
          - `approxGeo` Geopoint
            - `type` string, required — Type of point
            - `coordinates` number[], required — The longitude and latitude of the point
        - `level` integer — level of the group, for BAND type only
        - `func` EnumValue
          - `name` string, required — enum value name
          - `label` string, required — enum value label
          - `color` string — color of property
          - `expr` string — computed expression, for ENUM_EXPR type
          - `num` number — numeric value, for ENUM_SCALE type
          - `sort` integer — sort order
          - `rank` integer — rank order, if selected in rank order
          - `id` string — unique identifier for enum
          - `labelTr` Translations
            - `values` object, required
        - `locationType` EnumValue
          - `name` string, required — enum value name
          - `label` string, required — enum value label
          - `color` string — color of property
          - `expr` string — computed expression, for ENUM_EXPR type
          - `num` number — numeric value, for ENUM_SCALE type
          - `sort` integer — sort order
          - `rank` integer — rank order, if selected in rank order
          - `id` string — unique identifier for enum
          - `labelTr` Translations
            - `values` object, required
        - `minBase` Money
          - `amount` number, required
          - `currency` string, required
          - `places` integer
        - `maxBase` Money
          - `amount` number, required
          - `currency` string, required
          - `places` integer
        - `assignments` GroupPositionAssignments
          - `values` object, required
        - `expr` string — CQL filter expression that determines group membership; only meaningful when the GroupType assignmentType is EXPR
        - `createId` string — created by user id
        - `createBehalfId` string — created on behalf of user id
        - `createAttribution` Attribution
          - `principalUserId` string
          - `agentUserIds` string[]
          - `eventId` string
          - `aiChatId` string
          - `aiToolUseId` string
          - `channel` 'WEB' | 'MOBILE' | 'SLACK' | 'TEAMS' | 'MCP'
        - `createAt` string — created timestamp
        - `updateId` string — last updated by user id
        - `updateBehalfId` string — last updated on behalf of user id
        - `updateAttribution` Attribution
          - `principalUserId` string
          - `agentUserIds` string[]
          - `eventId` string
          - `aiChatId` string
          - `aiToolUseId` string
          - `channel` 'WEB' | 'MOBILE' | 'SLACK' | 'TEAMS' | 'MCP'
        - `updateAt` string — last updated timestamp
        - `deleteId` string — deleted by user id
        - `deleteBehalfId` string — deleted on behalf of user id
        - `deleteAttribution` Attribution
          - `principalUserId` string
          - `agentUserIds` string[]
          - `eventId` string
          - `aiChatId` string
          - `aiToolUseId` string
          - `channel` 'WEB' | 'MOBILE' | 'SLACK' | 'TEAMS' | 'MCP'
        - `deleteAt` string — deleted timestamp
        - `createDate` string, date — when this entity starts existing in org history
        - `deleteDate` string, date — when this entity stops existing in org history
      - `reports` BundleReport[] — list of reports included in this bundle
        - `report` PartialReport, required
          - `id` string — globally unique id
          - `orgId` string — parent organization id
          - `label` string — report label
          - `description` string — report description
          - `filter` string — filter automatically applied to every chart in this report
          - `share` 'NORMAL' | 'FULL' — sharing settings of report
          - `sensitive` 'GLOBAL' | 'ORG' | 'SENSITIVE' | 'PERSONAL' | 'MANAGER' | 'HIGH' | 'PRIVATE' — sensitivity level of report
          - `shareAccess` ShareAccess[] — users who are specifically granted permission to view or edit this report
            - `access` 'NONE' | 'LIMITED_READ' | 'LIMITED_WRITE' | 'STANDARD_READ' | 'STANDARD_WRITE' | 'COMPENSATION_READ' | 'FULL_READ' | 'COMP_PLANNING_PARTICIPANT' | 'COMPENSATION_WRITE' | 'WRITE' | 'COMPENSATION_OWNER' | 'OWNER', required — access permission level
            - `userId` string — user id
            - `groupId` string — group id
            - `fields` string — fields
          - `chartIds` string[] — list of charts in this report
          - `createId` string — created by user id
          - `createBehalfId` string — created on behalf of user id
          - `createAttribution` Attribution
            - `principalUserId` string
            - `agentUserIds` string[]
            - `eventId` string
            - `aiChatId` string
            - `aiToolUseId` string
            - `channel` 'WEB' | 'MOBILE' | 'SLACK' | 'TEAMS' | 'MCP'
          - `createAt` string — created timestamp
          - `updateId` string — last updated by user id
          - `updateBehalfId` string — last updated on behalf of user id
          - `updateAttribution` Attribution
            - `principalUserId` string
            - `agentUserIds` string[]
            - `eventId` string
            - `aiChatId` string
            - `aiToolUseId` string
            - `channel` 'WEB' | 'MOBILE' | 'SLACK' | 'TEAMS' | 'MCP'
          - `updateAt` string — last updated timestamp
          - `deleteId` string — deleted by user id
          - `deleteBehalfId` string — deleted on behalf of user id
          - `deleteAttribution` Attribution
            - `principalUserId` string
            - `agentUserIds` string[]
            - `eventId` string
            - `aiChatId` string
            - `aiToolUseId` string
            - `channel` 'WEB' | 'MOBILE' | 'SLACK' | 'TEAMS' | 'MCP'
          - `deleteAt` string — deleted timestamp
        - `charts` PartialReportChart[] — list of charts used in the report
          - `id` string — globally unique id
          - `orgId` string — parent organization id
          - `reportId` string — parent report id
          - `label` string — chart label
          - `type` 'LINE' | 'AREA' | 'STACKED' | 'BAR' | 'VERTICAL_BAR' | 'HORIZONTAL_BAR' | 'PIE' | 'TABLE' | 'TABLE_CROSSTAB' | 'SINGLE_METRIC' | 'BUBBLE' | 'HEADER' | 'TEXT' | 'GAUGE' | 'WATERFALL' | 'WATERFALL_TIMESERIES' | 'HEATMAP' | 'GEO' | 'GEO_HEATMAP' | 'GEO_SCATTER' | 'RADAR' | 'N_GRID' | 'NETWORK' | 'COMBO' | 'COMBO_TIMESERIES' | 'DONUT' | 'FUNNEL' | 'FUNNEL_TIMESERIES' | 'SANKEY' | 'SANKEY_TIMESERIES' | 'WORDCLOUD' | 'EMOJI_CLOUD' | 'CALENDAR_HEATMAP' | 'GANTT' — chart type
          - `filter` string — filter that applies to this chart
          - `filterOverride` boolean — whether the chart filter overrides the global filter
          - `query` ReportQuery
            - `series` ReportSeriesQuery[] — series to evaluate
              - …
            - `filters` ReportFilter[] — filters to crosstab all results by (deprecated in reports V2, should use groupBy instead)
              - …
            - `content` string — content block to evaluate as a Carrot Template, as an alternative to using series
            - `startDate` string — start date, in either relative (-7d) or exact (YYYY-MM-DD) format
            - `endDate` string — end date, in either relative (-7d) or exact (YYYY-MM-DD) format; if not present, defaults to today
            - `interval` 'DAY' | 'WEEK' | 'MONTH' | 'QUARTER' | 'FISCAL_QUARTER' | 'YEAR' | 'FISCAL_YEAR' — interval, if the query is a timeseries; if no interval, query is crosstabbed
            - `intervalDates` string[] — interval dates, if a specific set of irregular dates are being queried in a timeseries
            - `options` object, required — options, including format, filter, scenarioId, projectHires, and numerous display options
          - `sort` integer — sort order
          - `isAdvancedQueryMode` boolean — whether the chart configuration is using advanced mode
          - `createId` string — created by user id
          - `createBehalfId` string — created on behalf of user id
          - `createAttribution` Attribution
            - `principalUserId` string
            - `agentUserIds` string[]
            - `eventId` string
            - `aiChatId` string
            - `aiToolUseId` string
            - `channel` 'WEB' | 'MOBILE' | 'SLACK' | 'TEAMS' | 'MCP'
          - `createAt` string — created timestamp
          - `updateId` string — last updated by user id
          - `updateBehalfId` string — last updated on behalf of user id
          - `updateAttribution` Attribution
            - `principalUserId` string
            - `agentUserIds` string[]
            - `eventId` string
            - `aiChatId` string
            - `aiToolUseId` string
            - `channel` 'WEB' | 'MOBILE' | 'SLACK' | 'TEAMS' | 'MCP'
          - `updateAt` string — last updated timestamp
          - `deleteId` string — deleted by user id
          - `deleteBehalfId` string — deleted on behalf of user id
          - `deleteAttribution` Attribution
            - `principalUserId` string
            - `agentUserIds` string[]
            - `eventId` string
            - `aiChatId` string
            - `aiToolUseId` string
            - `channel` 'WEB' | 'MOBILE' | 'SLACK' | 'TEAMS' | 'MCP'
          - `deleteAt` string — deleted timestamp
      - `actions` PartialAction[] — list of actions included in this bundle
        - `id` string — globally unique id
        - `orgId` string — parent organization id
        - `event` string — event pattern to match on, such as change.create.*
        - `cronSchedule` string — cron schedule to run on, in crontab format
        - `filter` string — only run when matching a particular filter
        - `steps` ActionStep[] — list of steps to run when matching the event, schedule, and filter
          - `stepId` string — unique id for action step
          - `type` 'FORM' | 'MESSAGE' | 'HTTP' | 'TASK' | 'SIGNATURE' | 'AI', required — The type of action to run
          - `formId` string — If the action is FORM, the id of the form to fill out
          - `target` string — If the action is MESSAGE, the target to send the message to. If the action is FORM/TASK, the person who should have the form filled out on/complete the task
          - `assignee` string — If the action is FORM/TASK, the user who should fill out the form/complete the task (default is, same as target)
          - `notifyTarget` string — If the action is SIGNATURE, an additional target expression resolving to users who should receive notifications about signature events
          - `templateId` string — If the action is SIGNATURE, the id of the template to generate a document for signature
          - `aiAgentUserId` string — If the action is AI, the agent id to use, otherwise defaults to org default
          - `aiEnableMemory` boolean — If the action is AI, whether or not a per-action memory storage is supported
          - `aiApprovedPolicyRules` PolicyRule[] — If the action is AI, the policy rules that the AI agent should follow. If not provided, will use the default policy rules for the AI agent.
            - `allow` string[] — allow rules
            - `deny` string[] — deny rules
            - `categories` string[] — categories the rule is limited to
            - `fields` string[] — fields the rule is limited to
            - `departmentIds` string[] — departments the rule is limited to
            - `filter` string — custom filter the rule is limited to
            - `directions` string[] — directions that the rule applies to -- either self or under
            - `types` string[] — types that the rule applies to
            - `targets` PolicyRuleTarget[] — targets allowed for messaging (email addresses, chat channels, user ids)
              - …
            - `visibleSensitive` string[] — if specified, controls visibility of sensitive entities -- for example, ['Manager Shared', 'Manager Only']
            - `fieldsSensitive` string[] — if specified, controls applicability of fields by sensitivity -- for example, ['Manager Shared', 'Manager Only']
          - `modelTier` 'HIGH' | 'MEDIUM' | 'LOW' — If the action is AI, the requested model tier; defaults to LOW when not set
          - `message` string — The message that will be sent -- supports CQLT templates
          - `messageChannel` MessageChannelConfig
            - `channels` string[], required
            - `alwaysEmail` boolean, required
          - `emailSubject` string — The email subject line that will be used -- supports CQLT templates. If not provided, will use 'Notification'
          - `taskLabel` string — If the action is FORM, the task label that will be displayed to the user -- supports CQLT templates
          - `sensitive` boolean — whether to run with access to sensitive events or not - if this is left blank, will default to the sensitive setting of the Action
          - `httpUrl` string, uri — If the action is HTTP, the url that will receive the HTTP request
          - `httpMethod` string — If the action is HTTP, the method used by the HTTP request (defaults to POST)
          - `httpHeaders` object — If the action is HTTP, the headers to add to the HTTP request
          - `httpContent` object — If the action is HTTP, the payload contained in the HTTP request
        - `description` string — description of the action
        - `status` 'ACTIVE' | 'INACTIVE' — status of the action
        - `runUserId` string — the user to run the action as - normally the same as the user who created the action
        - `sensitive` boolean — whether to run with access to sensitive events or not
        - `categoryId` string — data category of the action, such as onboarding or offboarding
        - `assessmentId` string — assessment that this action is associated with
        - `formId` string — form that this action is associated with
        - `createId` string — created by user id
        - `createBehalfId` string — created on behalf of user id
        - `createAttribution` Attribution
          - `principalUserId` string
          - `agentUserIds` string[]
          - `eventId` string
          - `aiChatId` string
          - `aiToolUseId` string
          - `channel` 'WEB' | 'MOBILE' | 'SLACK' | 'TEAMS' | 'MCP'
        - `createAt` string — created timestamp
        - `updateId` string — last updated by user id
        - `updateBehalfId` string — last updated on behalf of user id
        - `updateAttribution` Attribution
          - `principalUserId` string
          - `agentUserIds` string[]
          - `eventId` string
          - `aiChatId` string
          - `aiToolUseId` string
          - `channel` 'WEB' | 'MOBILE' | 'SLACK' | 'TEAMS' | 'MCP'
        - `updateAt` string — last updated timestamp
        - `deleteId` string — deleted by user id
        - `deleteBehalfId` string — deleted on behalf of user id
        - `deleteAttribution` Attribution
          - `principalUserId` string
          - `agentUserIds` string[]
          - `eventId` string
          - `aiChatId` string
          - `aiToolUseId` string
          - `channel` 'WEB' | 'MOBILE' | 'SLACK' | 'TEAMS' | 'MCP'
        - `deleteAt` string — deleted timestamp
      - `templates` Template[] — list of templates included in this bundle
        - `id` string, required — globally unique id
        - `orgId` string, required — parent organization id
        - `name` string, required — template name, must be unique to organization
        - `description` string — description of template
        - `content` string — template content
        - `stylesheet` string — template inline stylesheet
        - `fileId` string — file identifier, if the template is based on a PDF file instead of a CQLT template
        - `placements` SignaturePlacement[] — signature zone placements for a file-based template; only valid when fileId is set
          - `type` 'SIGNATURE' | 'NAME' | 'TITLE' | 'DATE' | 'EXPR', required — the kind of placement
          - `x` number, float, required — horizontal position as a fraction (0..1) of page width, from the left edge
          - `y` number, float, required — vertical position as a fraction (0..1) of page height, from the top edge
          - `pageNumber` integer, required — 1-based page number the placement is anchored to
          - `width` number, float — optional width as a fraction (0..1) of page width, reserved for future use
          - `height` number, float — optional height as a fraction (0..1) of page height, reserved for future use
          - `expr` string — carrot expression evaluated against the document's person; required for EXPR placements
          - `signerNumber` integer — 1-based signer this placement binds to; when null, the placement is assigned to a signer by position
        - `type` 'DOCUMENT' | 'EMAIL', required — type of template
        - `tags` string[], required — tags to organize the purpose of the template
        - `filename` string — document filename CQL
        - `fieldId` string — the field id that will be used to store documents generated by this template
        - `qesFilter` string — filter expression evaluated on each signer for whether to use qualified electronic signature (if it evalutes to true for any signer, QES will be used). If null, defaults to org `qesFilter` setting
        - `isSequential` boolean — whether signers must sign in sequential order; false (the default) means simultaneous signing
        - `createId` string — created by user id
        - `createBehalfId` string — created on behalf of user id
        - `createAttribution` Attribution
          - `principalUserId` string
          - `agentUserIds` string[]
          - `eventId` string
          - `aiChatId` string
          - `aiToolUseId` string
          - `channel` 'WEB' | 'MOBILE' | 'SLACK' | 'TEAMS' | 'MCP'
        - `createAt` string — created timestamp
        - `updateId` string — last updated by user id
        - `updateBehalfId` string — last updated on behalf of user id
        - `updateAttribution` Attribution
          - `principalUserId` string
          - `agentUserIds` string[]
          - `eventId` string
          - `aiChatId` string
          - `aiToolUseId` string
          - `channel` 'WEB' | 'MOBILE' | 'SLACK' | 'TEAMS' | 'MCP'
        - `updateAt` string — last updated timestamp
        - `deleteId` string — deleted by user id
        - `deleteBehalfId` string — deleted on behalf of user id
        - `deleteAttribution` Attribution
          - `principalUserId` string
          - `agentUserIds` string[]
          - `eventId` string
          - `aiChatId` string
          - `aiToolUseId` string
          - `channel` 'WEB' | 'MOBILE' | 'SLACK' | 'TEAMS' | 'MCP'
        - `deleteAt` string — deleted timestamp
      - `contents` Content[] — list of resource content included in this bundle
        - `id` string, required — globally unique id
        - `orgId` string, required — parent organization id
        - `parentContentId` string — parent content id in the hierarchy
        - `title` string, required — title of the content page
        - `titleTr` Translations
          - `values` object, required
        - `path` string — full path to the content, if not set, defaults to an id/slug generated URL
        - `blocks` ContentBlock[] — content blocks
          - `content` string, required
          - `contentTr` Translations
            - `values` object, required
        - `imagePath` string — path to the image for the page
        - `emoji` string — emoji, if an emoji is used to represent the page
        - `coverImagePath` string — path to the cover image for the content page
        - `sensitive` 'GLOBAL' | 'ORG' | 'SENSITIVE' | 'PERSONAL' | 'MANAGER' | 'HIGH' | 'PRIVATE', required — sensitivity level (ORG public, HIGHly sensitive, or PRIVATE)
        - `shareAccess` ShareAccess[] — list of users and groups who have the content shared with them
          - `access` 'NONE' | 'LIMITED_READ' | 'LIMITED_WRITE' | 'STANDARD_READ' | 'STANDARD_WRITE' | 'COMPENSATION_READ' | 'FULL_READ' | 'COMP_PLANNING_PARTICIPANT' | 'COMPENSATION_WRITE' | 'WRITE' | 'COMPENSATION_OWNER' | 'OWNER', required — access permission level
          - `userId` string — user id
          - `groupId` string — group id
          - `fields` string — fields
        - `status` 'DRAFT' | 'ACTIVE' | 'ARCHIVED' — current status of the content page
        - `sort` integer — sort index within parent content
        - `createId` string — created by user id
        - `createBehalfId` string — created on behalf of user id
        - `createAttribution` Attribution
          - `principalUserId` string
          - `agentUserIds` string[]
          - `eventId` string
          - `aiChatId` string
          - `aiToolUseId` string
          - `channel` 'WEB' | 'MOBILE' | 'SLACK' | 'TEAMS' | 'MCP'
        - `createAt` string — created timestamp
        - `updateId` string — last updated by user id
        - `updateBehalfId` string — last updated on behalf of user id
        - `updateAttribution` Attribution
          - `principalUserId` string
          - `agentUserIds` string[]
          - `eventId` string
          - `aiChatId` string
          - `aiToolUseId` string
          - `channel` 'WEB' | 'MOBILE' | 'SLACK' | 'TEAMS' | 'MCP'
        - `updateAt` string — last updated timestamp
        - `deleteId` string — deleted by user id
        - `deleteBehalfId` string — deleted on behalf of user id
        - `deleteAttribution` Attribution
          - `principalUserId` string
          - `agentUserIds` string[]
          - `eventId` string
          - `aiChatId` string
          - `aiToolUseId` string
          - `channel` 'WEB' | 'MOBILE' | 'SLACK' | 'TEAMS' | 'MCP'
        - `deleteAt` string — deleted timestamp
      - `taskConfigs` PartialTaskConfig[] — list of task configs included in this bundle
        - `id` string — unique id of task config
        - `orgId` string — parent organization id
        - `assessmentId` string — parent assessment id that this task config belongs to
        - `parentEntityId` string — parent entity id that this task config belongs to, should be used with entityId
        - `entityId` string — the primary entity being referenced by the task config
        - `slug` string — System generated identifying name so that actions can be triggered as a result of task completion
        - `type` 'FORM_SUBMIT' | 'FORM_RESPONSE_APPROVE' | 'FORM_RESPONSE_RESUBMIT' | 'CHANGE_APPROVE' | 'TIMEOFF_APPROVE' | 'SCENARIO_CHANGES_APPROVE' | 'SCENARIO_CHANGES_CREATE' | 'ORG_IMPORT' | 'COMP_REVIEW_APPROVAL_SUBMIT' | 'SCENARIO_APPROVAL_SUBMIT' | 'APPROVAL_CHAIN_UPDATE_FALLBACK_APPROVER' | 'ACTION' | 'SIGNATURE' | 'GOAL_PROGRESS' | 'TODO' — type of task generated by the task config
        - `dueDate` DueDate
          - `type` 'EXACT' | 'RELATIVE', required
          - `dueDay` string, required — due day, in either relative (-7d) or exact (YYYY-MM-DD) format
          - `dueTime` string, required — due time, which is a LocalTime
        - `pastDueAction` 'NONE' | 'SET_EXPIRED' — sets pastDueAction on the task when it's generated
        - `isSkippable` boolean — sets isSkippable on the task
        - `label` string — human-readable label that should be used for all tasks associated with the config as the task name
        - `description` string — description for all tasks associated with the config that should be used in notifications
        - `createId` string — created by user id
        - `createBehalfId` string — created on behalf of user id
        - `createAttribution` Attribution
          - `principalUserId` string
          - `agentUserIds` string[]
          - `eventId` string
          - `aiChatId` string
          - `aiToolUseId` string
          - `channel` 'WEB' | 'MOBILE' | 'SLACK' | 'TEAMS' | 'MCP'
        - `createAt` string — created timestamp
        - `updateId` string — last updated by user id
        - `updateBehalfId` string — last updated on behalf of user id
        - `updateAttribution` Attribution
          - `principalUserId` string
          - `agentUserIds` string[]
          - `eventId` string
          - `aiChatId` string
          - `aiToolUseId` string
          - `channel` 'WEB' | 'MOBILE' | 'SLACK' | 'TEAMS' | 'MCP'
        - `updateAt` string — last updated timestamp
        - `deleteId` string — deleted by user id
        - `deleteBehalfId` string — deleted on behalf of user id
        - `deleteAttribution` Attribution
          - `principalUserId` string
          - `agentUserIds` string[]
          - `eventId` string
          - `aiChatId` string
          - `aiToolUseId` string
          - `channel` 'WEB' | 'MOBILE' | 'SLACK' | 'TEAMS' | 'MCP'
        - `deleteAt` string — deleted timestamp
      - `calendars` BundleCalendar[] — list of calendars included in this bundle
        - `calendar` Calendar, required
          - `id` string, required — globally unique id
          - `orgId` string — parent organization id
          - `type` 'ANNIVERSARY' | 'BIRTHDAY' | 'COMP_REVIEW' | 'REVIEW' | 'SURVEY' | 'TASK' | 'TIMEOFF' | 'START_DATE' | 'END_DATE' | 'CUSTOM' | 'HOLIDAY', required — type of calendar
          - `label` string, required — human-readable label for calendar
          - `description` string
          - `color` string, required
          - `imagePath` string
          - `emoji` string — emoji, if an emoji is used to represent the calendar
          - `sensitive` 'GLOBAL' | 'ORG' | 'SENSITIVE' | 'PERSONAL' | 'MANAGER' | 'HIGH' | 'PRIVATE', required — base sensitivity of this calendar and entities in it -- should be PRIVATE, ORG or HIGH
          - `shareAccess` ShareAccess[] — list of users and groups who have the content shared with them
            - `access` 'NONE' | 'LIMITED_READ' | 'LIMITED_WRITE' | 'STANDARD_READ' | 'STANDARD_WRITE' | 'COMPENSATION_READ' | 'FULL_READ' | 'COMP_PLANNING_PARTICIPANT' | 'COMPENSATION_WRITE' | 'WRITE' | 'COMPENSATION_OWNER' | 'OWNER', required — access permission level
            - `userId` string — user id
            - `groupId` string — group id
            - `fields` string — fields
          - `status` 'ACTIVE' | 'INACTIVE', required — whether the calendar is active or not
          - `eligibility` CalendarEligibility
            - `filter` string — CQL filter selecting the people this calendar applies to; blank matches everyone
            - `includePersonIds` string[] — personIds always included, regardless of the filter
            - `excludePersonIds` string[] — personIds always excluded, even if they match the filter
          - `createId` string — created by user id
          - `createBehalfId` string — created on behalf of user id
          - `createAttribution` Attribution
            - `principalUserId` string
            - `agentUserIds` string[]
            - `eventId` string
            - `aiChatId` string
            - `aiToolUseId` string
            - `channel` 'WEB' | 'MOBILE' | 'SLACK' | 'TEAMS' | 'MCP'
          - `createAt` string — created timestamp
          - `updateId` string — last updated by user id
          - `updateBehalfId` string — last updated on behalf of user id
          - `updateAttribution` Attribution
            - `principalUserId` string
            - `agentUserIds` string[]
            - `eventId` string
            - `aiChatId` string
            - `aiToolUseId` string
            - `channel` 'WEB' | 'MOBILE' | 'SLACK' | 'TEAMS' | 'MCP'
          - `updateAt` string — last updated timestamp
          - `deleteId` string — deleted by user id
          - `deleteBehalfId` string — deleted on behalf of user id
          - `deleteAttribution` Attribution
            - `principalUserId` string
            - `agentUserIds` string[]
            - `eventId` string
            - `aiChatId` string
            - `aiToolUseId` string
            - `channel` 'WEB' | 'MOBILE' | 'SLACK' | 'TEAMS' | 'MCP'
          - `deleteAt` string — deleted timestamp
          - `isBuiltIn` boolean, required
        - `entries` CalendarEntry[] — list of calendar entries used in the calendar
          - `id` string, required — globally unique id, or zero-id if the entry is a virtual entry
          - `orgId` string — parent organization id
          - `calendarId` string, required — calendar to which this event pertains
          - `label` string, required — human-readable label for event
          - `description` string
          - `from` string, date, required — start date for event (inclusive)
          - `until` string, date, required — end date for event (exclusive)
          - `entityType` 'ACTION' | 'AGREEMENT' | 'AI_AGENT' | 'AI_AGENT_MEMORY' | 'AI_CHAT' | 'AI_CONFIG' | 'AI_CREDIT_LIMIT' | 'AI_CREDIT_USAGE' | 'AI_HINT' | 'AI_PROMPT' | 'APP' | 'APP_CONFIG' | 'APPROVAL_CHAIN' | 'APPROVAL_CHAIN_STAGE' | 'APPROVAL_DELEGATE' | 'APPROVAL_REQUEST' | 'ASSESSMENT' | 'BUDGET' | 'BUDGET_POOL' | 'BUNDLE' | 'CALENDAR' | 'CALENDAR_ENTRY' | 'CATEGORY' | 'CATEGORY_SORT' | 'CHANGE' | 'COMMENT' | 'COMP_BAND' | 'COMP_REVIEW' | 'CONTENT' | 'CUSTOMER' | 'DATA_VIEW' | 'EXCHANGE_RATE' | 'EMAIL_TEMPLATE' | 'EVENT' | 'FIELD' | 'FILE' | 'FORM' | 'FORM_DRAFT' | 'FORM_RESPONSE' | 'GEOCODE' | 'GROUP' | 'GROUP_ALLOCATION' | 'GROUP_TYPE' | 'GOAL' | 'GOAL_PROGRESS' | 'GOAL_TARGET' | 'GOAL_TYPE' | 'GUIDELINE' | 'JOB' | 'JOB_CODE' | 'JOB_LEVEL' | 'MEDIA' | 'MESSAGE' | 'MULTIPLIER' | 'ORG' | 'ORG_CONFIG' | 'PERSON' | 'PROFILE_TAB' | 'POLICY' | 'PROCESS' | 'PRODUCT' | 'QUERY_TOKEN' | 'QUESTION' | 'REPORT' | 'REPORT_CHART' | 'ROLE' | 'SCENARIO' | 'SIGNATURE' | 'SIGNATURE_REQUEST' | 'STOCK_GRANT' | 'STOCK_PRICE' | 'TABLE' | 'TABLE_ROW' | 'TASK_CONFIG' | 'TEMPLATE' | 'TASK' | 'TOKEN' | 'TIMEOFF' | 'TIMEOFF_BALANCE_ADJUSTMENT' | 'TIMEOFF_LEDGER_ENTRY' | 'TIMEOFF_POLICY' | 'TRANSCRIPT' | 'USER' — type of associated entity
          - `entityId` string — associated entity
          - `personId` string — person id for person-related calendar entries
          - `createId` string — created by user id
          - `createBehalfId` string — created on behalf of user id
          - `createAttribution` Attribution
            - `principalUserId` string
            - `agentUserIds` string[]
            - `eventId` string
            - `aiChatId` string
            - `aiToolUseId` string
            - `channel` 'WEB' | 'MOBILE' | 'SLACK' | 'TEAMS' | 'MCP'
          - `createAt` string — created timestamp
          - `updateId` string — last updated by user id
          - `updateBehalfId` string — last updated on behalf of user id
          - `updateAttribution` Attribution
            - `principalUserId` string
            - `agentUserIds` string[]
            - `eventId` string
            - `aiChatId` string
            - `aiToolUseId` string
            - `channel` 'WEB' | 'MOBILE' | 'SLACK' | 'TEAMS' | 'MCP'
          - `updateAt` string — last updated timestamp
          - `deleteId` string — deleted by user id
          - `deleteBehalfId` string — deleted on behalf of user id
          - `deleteAttribution` Attribution
            - `principalUserId` string
            - `agentUserIds` string[]
            - `eventId` string
            - `aiChatId` string
            - `aiToolUseId` string
            - `channel` 'WEB' | 'MOBILE' | 'SLACK' | 'TEAMS' | 'MCP'
          - `deleteAt` string — deleted timestamp
      - `timeOffPolicies` TimeOffPolicy[] — list of time off policies included in this bundle
        - `id` string, required — Globally unique id of time off policy
        - `orgId` string, required — Org that the time off belongs to
        - `name` string, required — Internal policy name
        - `displayName` string — External policy name displayed to users
        - `description` string — Policy description
        - `guidelines` string — Policy guidelines
        - `type` 'PTO' | 'TOIL' | 'VACATION' | 'SICK' | 'MEDICAL' | 'JURY' | 'OFFSITE' | 'PARENTAL' | 'UNPAID' | 'DISABILITY_SHORT' | 'DISABILITY_LONG' | 'BEREAVEMENT' | 'MILITARY' | 'RELIGIOUS' | 'VOTING' | 'VOLUNTEER' | 'UNKNOWN' — Type of policy to be created
        - `status` 'ACTIVE' | 'INACTIVE', required — Status of the policy
        - `allocationType` 'UPFRONT' | 'UNLIMITED' | 'ACCRUAL' — Whether the time off is accrued, received upfront, or is an unlimited policy
        - `annualAllocation` number — Number of days allocated annually
        - `accrualConfig` AccrualConfig
          - `frequency` 'SEMI_MONTHLY' | 'MONTHLY' | 'WEEKLY', required
          - `monthlyDaysOfMonth` integer[]
          - `weeklyStartDate` string, date
          - `weeklyIncrement` integer
          - `balanceCapInWholeDays` integer
          - `accrualOffsetFromStartDate` integer, required
        - `maxConsecutiveDaysPerRequest` number — An optional max number of days allowed per request
        - `minBalance` number — An optional minimum balance
        - `enableCarryOverBalance` boolean — Enable carry over balance.
        - `maxCarryOverBalance` number — An optional maximum carry over balance
        - `carryOverExpirationDate` string — Month and day of carry over expiration.
        - `carryOverExpirationMonths` integer — Months after carry over date that carry over expires.
        - `enablePartialDayRequests` boolean — Allow half day requests
        - `partialDayGranularity` number — Partial day requests can only be made down to this level of granularity (i.e. request % granularity == 0)
        - `enablePartialDayPeriod` boolean — Allow specifying periods of time (e.g. AM, PM) for partial days
        - `disableRequests` boolean — Whether to disable time off requests for this policy
        - `noteRequired` boolean — Whether a note is required for time off requests
        - `filter` string, required — CQL used to determine which jobs the policy applies to
        - `holidayCalendarId` string — an associated holiday calendar, days on this calendar are not deducted from the time off balance
        - `respectPersonCalendar` boolean — when true, a holiday calendar applied to the person via calendar eligibility takes precedence over this policy's holidayCalendarId
        - `disableProratedAllocation` boolean — whether limited allocation policies are prorated based on person start date
        - `prorationRounding` 'UP' | 'NEAREST' | 'HALF' — rounding method for prorating calculations
        - `yearStartDate` string — Month and day of policy year rollover. Defaults to January 1.
        - `policyFromDate` string, date — The date on which this policy's balance/accrual settings come into effect. The policy may have entries before this date, but it will not generate e.g. accrual entries.
        - `policyUntilDate` string, date — The first date after this policy's balance/accrual settings end (i.e. the exclusive end date). The policy may have entries after this date, but it will not generate e.g. accrual entries.
        - `workDays` string[] — Days of the week that count against the time off balance. Defaults to Monday through Friday if not set.
        - `policyEvents` PolicyEvent[]
          - `dateExpr` string, required
          - `action` PolicyAction, required
            - `type` 'OPEN' | 'CLOSE' | 'MOD_ALLOCATION' | 'ADJUST' | 'TRANSFER' | 'PRORATED_MOD' | 'FULL_MOD', required
            - `exprString` string
          - `noteExpr` string
          - `groupId` string
          - `title` string — Display name for the milestone group this event belongs to
        - `createId` string — created by user id
        - `createBehalfId` string — created on behalf of user id
        - `createAttribution` Attribution
          - `principalUserId` string
          - `agentUserIds` string[]
          - `eventId` string
          - `aiChatId` string
          - `aiToolUseId` string
          - `channel` 'WEB' | 'MOBILE' | 'SLACK' | 'TEAMS' | 'MCP'
        - `createAt` string — created timestamp
        - `updateAt` string — updated timestamp
        - `updateId` string — updated by user id
        - `updateBehalfId` string — last updated on behalf of user id
        - `updateAttribution` Attribution
          - `principalUserId` string
          - `agentUserIds` string[]
          - `eventId` string
          - `aiChatId` string
          - `aiToolUseId` string
          - `channel` 'WEB' | 'MOBILE' | 'SLACK' | 'TEAMS' | 'MCP'
        - `deleteId` string — deleted by user id
        - `deleteBehalfId` string — deleted on behalf of user id
        - `deleteAttribution` Attribution
          - `principalUserId` string
          - `agentUserIds` string[]
          - `eventId` string
          - `aiChatId` string
          - `aiToolUseId` string
          - `channel` 'WEB' | 'MOBILE' | 'SLACK' | 'TEAMS' | 'MCP'
        - `deleteAt` string — deleted timestamp
    - `agentConfig` AiAgentConfig
      - `personality` string
      - `instructions` string
      - `guardrails` string
      - `enableMemory` boolean
      - `enableMcpServer` boolean — whether this agent exposes an MCP server endpoint for per-user OAuth access
      - `enableMcpWrite` boolean — whether this agent's MCP server may invoke write/mutating tools (e.g. a non-read-only AskAgent delegation). Read-only by default: when unset or false, a tool that mutates on the call is rejected at the MCP edge regardless of the agent's role/policy. This is defense in depth layered on top of the role, never a grant beyond it.
      - `isExternal` boolean — whether this agent is an external (non-ChartHop) client, e.g. Claude Code or ChatGPT. External agents have no ChartHop-side prompt/behavior config: only permissions, MCP, and activity are configurable.
      - `approvedPolicyRules` PolicyRule[]
        - `allow` string[] — allow rules
        - `deny` string[] — deny rules
        - `categories` string[] — categories the rule is limited to
        - `fields` string[] — fields the rule is limited to
        - `departmentIds` string[] — departments the rule is limited to
        - `filter` string — custom filter the rule is limited to
        - `directions` string[] — directions that the rule applies to -- either self or under
        - `types` string[] — types that the rule applies to
        - `targets` PolicyRuleTarget[] — targets allowed for messaging (email addresses, chat channels, user ids)
          - `userId` string
          - `personId` string
          - `channel` string
          - `email` string
        - `visibleSensitive` string[] — if specified, controls visibility of sensitive entities -- for example, ['Manager Shared', 'Manager Only']
        - `fieldsSensitive` string[] — if specified, controls applicability of fields by sensitivity -- for example, ['Manager Shared', 'Manager Only']
      - `approvalGuidelines` string
      - `managerJobId` string
      - `messagingConfig` MessagingConfig
        - `slackAppId` string
        - `slackClientId` string
        - `slackBotUserId` string
      - `contentIds` string[] — pinned content document IDs; when merging user and app configs, both lists are unioned (not replaced); validate with validateContentIds before persisting
      - `modelTier` 'HIGH' | 'MEDIUM' | 'LOW' — requested model tier for the agent; defaults to MEDIUM when not set
      - `targetedInstructions` TargetedInstruction[] — audience-scoped instruction snippets injected into the chat prompt when the filter matches the current viewer's person record; size and filter syntax are checked by AgentValidationService before persisting
        - `filter` string, required — filter expression matched against the current viewer's person record
        - `instructions` string, required — instructions injected into the chat prompt when filter matches
    - `externalApiConfig` ExternalApiConfig
      - `url` string
      - `auth` ExternalApiAuthConfig, required
        - `type` 'QUERY_PARAM' | 'HEADER_BEARER' | 'HEADER_BASIC' | 'HEADER_API_KEY' | 'AWS_SIGV4' | 'OAUTH', required
        - `queryParams` object
        - `headerName` string
        - `tokenTemplate` string
        - `awsRegion` string
        - `awsService` string
        - `awsAccessKeyIdTemplate` string
        - `awsSecretAccessKeyTemplate` string
        - `awsSessionTokenTemplate` string
        - `enableUserConnection` boolean
        - `enableOrgConnection` boolean
        - `oauthAuthorizeUrl` string
        - `oauthTokenUrl` string
        - `oauthClientId` string
        - `oauthClientAuthMethod` 'BASIC' | 'POST'
        - `oauthGrantType` 'AUTHORIZATION_CODE' | 'CLIENT_CREDENTIALS'
        - `oauthScope` string
      - `apiOperations` ApiOperation[]
        - `operation` string, required
        - `summary` string, required
        - `method` string, required
        - `path` string, required
        - `parameters` ApiParameter[]
          - `name` string, required
          - `location` string, required
          - `description` string, required
          - `required` boolean, required
          - `schema` object, required
          - `dateFormat` 'ISO_INSTANT' | 'ISO_DATE' | 'EPOCH_SECONDS' | 'EPOCH_MILLIS'
          - `const` object
          - `default` object
        - `requestBody` ApiRequestBody
          - `required` boolean, required
          - `properties` ApiBodyProperty[], required
            - `name` string, required
            - `description` string, required
            - `type` string, required
            - `items` string
            - `required` boolean, required
            - `shape` string
            - `const` object
            - `default` object
        - `pagination` PaginationConfig
          - `type` 'NONE' | 'NEXT_URL' | 'LINK_HEADER' | 'CURSOR' | 'OFFSET' | 'PAGE_NUMBER', required
          - `itemsPath` string
          - `nextPath` string
          - `hasMorePath` string
          - `endOfStreamPath` string
          - `totalPath` string
          - `linkRel` string
          - `pageParam` string
          - `sizeParam` string
          - `pageSize` integer
          - `startValue` integer
        - `responseType` string, required
        - `responseExtract` string
        - `readOnly` boolean
        - `successPredicate` SuccessPredicate
          - `path` string, required
          - `condition` 'ABSENT' | 'PRESENT' | 'EQUALS', required
          - `expected` object
        - `graphqlQuery` string
      - `pagination` PaginationConfig
        - `type` 'NONE' | 'NEXT_URL' | 'LINK_HEADER' | 'CURSOR' | 'OFFSET' | 'PAGE_NUMBER', required
        - `itemsPath` string
        - `nextPath` string
        - `hasMorePath` string
        - `endOfStreamPath` string
        - `totalPath` string
        - `linkRel` string
        - `pageParam` string
        - `sizeParam` string
        - `pageSize` integer
        - `startValue` integer
      - `entities` object
      - `pull` PullAppConfig
        - `entities` string[]
      - `ats` AtsAppConfig
        - `reqField` string, required
        - `jobEntity` string
        - `userEntity` string
        - `departmentEntity` string
        - `locationEntity` string
        - `teamEntity` string
        - `listJobsUpdatedSince` ApiOperationCall
          - `operation` string, required
          - `params` object
          - `forEach` ForEach
            - `optionKey` string
            - `parsePattern` string
        - `listJobsByCode` ApiOperationCall
          - `operation` string, required
          - `params` object
          - `forEach` ForEach
            - `optionKey` string
            - `parsePattern` string
        - `createJob` ApiOperationCall, required
          - `operation` string, required
          - `params` object
          - `forEach` ForEach
            - `optionKey` string
            - `parsePattern` string
        - `updateJob` ApiOperationCall, required
          - `operation` string, required
          - `params` object
          - `forEach` ForEach
            - `optionKey` string
            - `parsePattern` string
        - `deleteJob` ApiOperationCall
          - `operation` string, required
          - `params` object
          - `forEach` ForEach
            - `optionKey` string
            - `parsePattern` string
        - `hiringManager` HiringTeamAssignment
          - `assign` ApiOperationCall, required
            - `operation` string, required
            - `params` object
            - `forEach` ForEach
              - …
          - `remove` ApiOperationCall
            - `operation` string, required
            - `params` object
            - `forEach` ForEach
              - …
        - `recruiter` HiringTeamAssignment
          - `assign` ApiOperationCall, required
            - `operation` string, required
            - `params` object
            - `forEach` ForEach
              - …
          - `remove` ApiOperationCall
            - `operation` string, required
            - `params` object
            - `forEach` ForEach
              - …
        - `openingConfig` OpeningConfig
          - `type` 'NESTED' | 'LINKED_BY_CODE' | 'SINGLE', required
          - `namespace` string
          - `list` ApiOperationCall
            - `operation` string, required
            - `params` object
            - `forEach` ForEach
              - …
          - `jobIdField` string
          - `create` ApiOperationCall
            - `operation` string, required
            - `params` object
            - `forEach` ForEach
              - …
          - `update` ApiOperationCall
            - `operation` string, required
            - `params` object
            - `forEach` ForEach
              - …
          - `updateFields` ApiOperationCall
            - `operation` string, required
            - `params` object
            - `forEach` ForEach
              - …
          - `delete` ApiOperationCall
            - `operation` string, required
            - `params` object
            - `forEach` ForEach
              - …
        - `source` string
        - `jobUrlTemplate` string
      - `transcript` TranscriptAppConfig
        - `listRecordings` ApiOperationCall, required
          - `operation` string, required
          - `params` object
          - `forEach` ForEach
            - `optionKey` string
            - `parsePattern` string
        - `source` string, required
        - `defaultSensitive` 'GLOBAL' | 'ORG' | 'SENSITIVE' | 'PERSONAL' | 'MANAGER' | 'HIGH' | 'PRIVATE'
        - `webhookRecordingIdPath` string
      - `identity` IdentityAppConfig
        - `contactType` string, required
        - `userFields` IdentityUserFields, required
          - `emailField` string, required
          - `alternateEmailFields` string[]
          - `firstNameField` string
          - `lastNameField` string
          - `statusField` string, required
          - `inactiveValues` string[]
          - `activeValues` string[]
          - `writeBlockedField` string
          - `managerField` string
        - `userEntity` string
        - `groupEntity` string
        - `findUserByEmail` ApiOperationCall
          - `operation` string, required
          - `params` object
          - `forEach` ForEach
            - `optionKey` string
            - `parsePattern` string
        - `listUserGroups` ApiOperationCall, required
          - `operation` string, required
          - `params` object
          - `forEach` ForEach
            - `optionKey` string
            - `parsePattern` string
        - `createUser` ApiOperationCall, required
          - `operation` string, required
          - `params` object
          - `forEach` ForEach
            - `optionKey` string
            - `parsePattern` string
        - `updateUser` ApiOperationCall, required
          - `operation` string, required
          - `params` object
          - `forEach` ForEach
            - `optionKey` string
            - `parsePattern` string
        - `activateUser` ApiOperationCall, required
          - `operation` string, required
          - `params` object
          - `forEach` ForEach
            - `optionKey` string
            - `parsePattern` string
        - `deactivateUser` ApiOperationCall, required
          - `operation` string, required
          - `params` object
          - `forEach` ForEach
            - `optionKey` string
            - `parsePattern` string
        - `addGroupMember` ApiOperationCall, required
          - `operation` string, required
          - `params` object
          - `forEach` ForEach
            - `optionKey` string
            - `parsePattern` string
        - `removeGroupMember` ApiOperationCall, required
          - `operation` string, required
          - `params` object
          - `forEach` ForEach
            - `optionKey` string
            - `parsePattern` string
        - `assignManager` ApiOperationCall
          - `operation` string, required
          - `params` object
          - `forEach` ForEach
            - `optionKey` string
            - `parsePattern` string
        - `removeManager` ApiOperationCall
          - `operation` string, required
          - `params` object
          - `forEach` ForEach
            - `optionKey` string
            - `parsePattern` string
        - `clearNullFields` boolean
      - `inboundFieldMappers` FieldMapper[]
        - `id` string — unique id
        - `key` string — stable semantic key used by per-install AppConfig overrides/disables. Defaults to the single charthop field; an explicit key is required for multi-output mappers.
        - `readOnly` boolean — when true, this mapper only DEFINES how to read the value from the source system (for the outbound diff to compare against); it is not synced into ChartHop, so its charthopFields key is just a correlation handle and need not be a real ChartHop field.
        - `charthopFields` string[], required — list of ChartHop fields
        - `remoteFields` string[], required — list of remote fields
        - `type` string, required — type of field mapper to apply for mapping remote fields to ChartHop fields
        - `defaultCharthopValue` string — default charthop value
        - `defaultRemoteValue` string — default remote value
        - `defaultAmount` number — default amount
        - `defaultCurrency` string — default currency
        - `transformFunction` string — transform function
        - `charthopToRemoteTransformFunction` string — charthop to remote transform function
        - `map` object — map
        - `charthopToRemoteMap` object — charthop to remote map
        - `idField` string — id field
        - `nameField` string — name field
        - `remoteToCharthopMultiplier` number — remote to Charthop Multiplier
        - `separator` string — separator for join field mapper
        - `expression` string — CQL expression for the 'expression' field mapper. The single remote field's value is bound to `value`; each remote field is also addressable by its own name. e.g. split(value, "/")[2]
      - `outboundFieldMappers` OutboundFieldMapper[]
        - `charthopExprs` string[], required — ordered CQL expressions evaluated against the ChartHop entity; one resolves to a scalar, two or more to a list passed to the transform (e.g. a money range).
        - `key` string — stable semantic name for this value: the op-call references it as {{key}}, the diff joins it to the inbound read of the same key, and per-install AppConfig overrides/disables key off it. Defaults to the single charthopExpr; required when charthopExprs has multiple entries or the expression is a formula.
        - `writeAs` string — remote write path for a value routed through a generic collector (e.g. "custom_fields.employment_type"); omitted for fields the op-call params name directly. Dotted paths nest into the request body.
        - `transform` string — optional named transform applied to the value before it is bound
        - `transformArgs` object — optional static configuration passed to the transform (e.g. codelist domain/name)
        - `charthopFilter` string — optional CQL boolean; when it resolves to false the mapper is skipped
        - `ifOption` string — optional install-option name; the mapper applies only when that boolean option is set, or only when it is not if the name is prefixed with "!". Unlike charthopFilter (a per-record CQL boolean) this is fixed for the whole install, so two mappers sharing a key with opposing conditions express "this field is sourced differently when the option is on".
        - `refEntity` string — optional entities-catalog type (e.g. "department", "office", "user") to match the value against -> remote id(s); absent passes the value through. Cardinality follows the body property's type.
        - `clearWhenEmpty` boolean — whether an empty ChartHop value clears the remote field on an update, overriding the sync family's default. Set false for a field whose blank means "unknown" rather than "none", so a gap in ChartHop can't erase a good remote value; set true for a reference (e.g. manager) whose absence genuinely means there is none. A reference the ChartHop side HAS but the remote couldn't match is never cleared either way — that is a matching failure, not an empty field, and it is logged as one.
        - `writeTo` string — which remote record receives this value: the job (absent, the default) or the opening namespace (AtsAppConfig.openingConfig.namespace, "opening") for a vendor whose openings hold their own field values. An opening-targeted mapper is written by openingConfig.updateFields, not the job write.
      - `rateLimit` RateLimitConfig
        - `retryAfterHeader` string
        - `maxRetries` integer
        - `baseBackoffMillis` integer
        - `maxBackoffMillis` integer
        - `retryServerErrors` boolean
    - `webhookConfig` WebhookConfig
      - `auth` 'HMAC' | 'JWT' | 'HEADER_SECRET' | 'HEADER_BEARER' | 'HEADER_BASIC', required — verification mechanism applied to inbound webhook requests
      - `hmac` HmacConfig
        - `algorithm` 'SHA1' | 'SHA256' | 'SHA512' — HMAC hash algorithm. Default=SHA256
        - `timestampFormat` 'EPOCH_SECONDS' | 'ISO_8601' — format of the timestamp header value. Null means the signing input is just the request body (no timestamp included).
        - `payloadSeparator` string — string inserted between the timestamp and the body when timestampFormat is set (e.g. "." for stripe-style, ":" for slack-style). Default=""
        - `signatureEncoding` 'HEX' | 'BASE64' — encoding of the HMAC output. Default=HEX
      - `jwt` JwtConfig
        - `algorithm` 'HS256' | 'HS384' | 'HS512' | 'RS256' | 'RS384' | 'RS512' — JWT signing algorithm. Default=RS256
        - `bodyHashClaim` string — name of the JWT claim carrying the hex SHA-256 digest of the request body. Default=body_sha256.
        - `expectedIssuer` string — if set, the JWT `iss` claim must be present and equal to this value
        - `expectedAudience` string — if set, the JWT `aud` claim must be present and contain this value
      - `signatureHeader` string — header name carrying the signature/JWT/secret. Defaults: HMAC=X-Signature, JWT/HEADER_BEARER/HEADER_BASIC=Authorization, HEADER_SECRET=X-Webhook-Secret
      - `timestampHeader` string — for HMAC schemes that include a timestamp in the signing input, name of the header carrying the request timestamp. Default=X-Timestamp
      - `signaturePrefix` string — optional prefix stripped from the signature header before comparison (e.g. "sha256=" for github-style HMAC signatures, or "Bearer " for JWT)
    - `secrets` AppSecrets
      - `slackClientSecret` string
      - `slackSigningSecret` string
      - `oauthClientSecret` string
    - `scopes` string[] — access scopes that the app is requesting
    - `tags` string[] — tags/categories the app belongs to
    - `requiredFeatures` string[] — The product features that are required in order to install the app or bundle
    - `internalOptions` object — internal (ChartHop controlled) options
    - `createId` string — created by user id
    - `createBehalfId` string — created on behalf of user id
    - `createAttribution` Attribution
      - `principalUserId` string
      - `agentUserIds` string[]
      - `eventId` string
      - `aiChatId` string
      - `aiToolUseId` string
      - `channel` 'WEB' | 'MOBILE' | 'SLACK' | 'TEAMS' | 'MCP'
    - `createAt` string — created timestamp
    - `updateId` string — last updated by user id
    - `updateBehalfId` string — last updated on behalf of user id
    - `updateAttribution` Attribution
      - `principalUserId` string
      - `agentUserIds` string[]
      - `eventId` string
      - `aiChatId` string
      - `aiToolUseId` string
      - `channel` 'WEB' | 'MOBILE' | 'SLACK' | 'TEAMS' | 'MCP'
    - `updateAt` string — last updated timestamp
    - `deleteId` string — deleted by user id
    - `deleteBehalfId` string — deleted on behalf of user id
    - `deleteAttribution` Attribution
      - `principalUserId` string
      - `agentUserIds` string[]
      - `eventId` string
      - `aiChatId` string
      - `aiToolUseId` string
      - `channel` 'WEB' | 'MOBILE' | 'SLACK' | 'TEAMS' | 'MCP'
    - `deleteAt` string — deleted timestamp
  - `next` string
  - `access` ResultsAccess[]
    - `ids` string[]
    - `allowed` AccessAction[], required
      - `action` string, required
      - `fields` string[]
      - `types` string[]

## Other responses

- `400` — bad request
- `404` — not found

---

[API](https://skmtc.net/charthop/apis/charthop-api.md) · [All operations](https://skmtc.net/charthop/apis/charthop-api/llms.txt) · [OpenAPI document](https://skmtc-service-staging.skmtc.workers.dev/v1/apis/charthop/charthop-api/versions/50a1edd6b27e/schema)
