Charthop preload API
The preload API from Charthop — 1 operation(s) for preload.
The preload API from Charthop — 1 operation(s) for preload.
swagger: '2.0'
info:
description: REST API for ChartHop
version: V1.0.0
title: ChartHop access preload API
contact:
name: ChartHop
url: https://www.charthop.com
email: support@charthop.com
host: localhost
schemes:
- https
- http
consumes:
- application/json
produces:
- application/json
tags:
- name: preload
paths:
/v1/org/{orgId}/preload:
get:
tags:
- preload
summary: Return a set of pre-loaded data required by the web app
operationId: getPreloadData
consumes:
- application/json
produces:
- application/json
parameters:
- name: orgId
in: path
description: Org identifier (either id or slug)
required: true
type: string
responses:
'200':
description: successful operation
schema:
$ref: '#/definitions/PreloadResponse'
'400':
description: bad request
'404':
description: not found
definitions:
OrgAccess:
type: object
required:
- orgId
- access
properties:
orgId:
type: string
description: org id
example: 5887a7718f138b6a2a0041a7
personId:
type: string
description: person id, if this user directly corresponds with a person
example: 5887a7718f138b6a2a0041a7
access:
type: string
description: legacy access permission level
enum:
- 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
groupIds:
type: array
description: group ids that the above access applies to
uniqueItems: true
items:
type: string
example: 588f7ee98f138b19220041a7
expr:
type: string
description: expression that the above access applies to
expireAt:
type: string
description: timestamp that this org access will expire
roleId:
type: string
description: the role id that defines the users access
example: 5887a7718f138b6a2a0041a7
status:
type: string
description: Onboarding status of the user in this org
enum:
- INACTIVE
- PREBOARDING
- ACTIVATION
- ACTIVE
- OFFBOARDED
homeEmail:
type: string
description: Personal email address of user, while they are preboarding
example: bob@example.com
minItems: 0
maxItems: 120
workEmail:
type: string
description: Work email address of user, once they have started
example: robert.doe@example.com
minItems: 0
maxItems: 120
workRoleId:
type: string
description: Active role ID that defines the user's access once they have started
example: 67c851da3dd1668c2fdd7e44
Address:
type: object
required:
- country
properties:
street1:
type: string
description: street address, line 1
example: 123 Anywhere Street
minItems: 0
maxItems: 200
street2:
type: string
description: street address, line 2
example: Apt 6L
minItems: 0
maxItems: 200
street3:
type: string
description: street address, line 3
example: Sixth Floor
minItems: 0
maxItems: 200
city:
type: string
description: city
example: New York
minItems: 0
maxItems: 80
state:
type: string
description: state
example: NY
minItems: 0
maxItems: 80
country:
type: string
description: country (two-digit ISO code)
example: NY
pattern: ^[A-Z]{2}$
postal:
type: string
description: postal code
example: '10001'
minItems: 0
maxItems: 10
geo:
description: geopoint location
$ref: '#/definitions/Geopoint'
approxGeo:
description: approximate geopoint location (suitable for a map placement, but not exact location)
$ref: '#/definitions/Geopoint'
TargetedInstruction:
type: object
required:
- filter
- instructions
properties:
filter:
type: string
description: filter expression matched against the current viewer's person record
instructions:
type: string
description: instructions injected into the chat prompt when filter matches
PolicyRuleTarget:
type: object
properties:
userId:
type: string
personId:
type: string
example: 588f7ee98f138b19220041a7
channel:
type: string
email:
type: string
OrgConfig:
type: object
required:
- id
properties:
id:
type: string
description: globally unique id
example: 588f7ee98f138b19220041a7
orgId:
type: string
description: parent organization id
example: 588f7ee98f138b19220041a7
hiddenFieldIds:
type: array
description: set of hidden field ids of an org
uniqueItems: true
items:
type: string
example: 588f7ee98f138b19220041a7
builtinCategoryMap:
type: array
description: set of maps of the custom fields that belongs to a built-in category
uniqueItems: true
items:
$ref: '#/definitions/BuiltInCategoryMap'
builtinFieldConfig:
type: array
description: Org configuration for built-in fields
uniqueItems: true
items:
$ref: '#/definitions/BuiltInFieldConfig'
compensationBandsConfig:
description: Org configuration for compensation bands tiers, multipliers, and job levels
$ref: '#/definitions/CompensationBandsConfig'
smartCurrencyOptions:
type: array
description: Options for where to source a currency to use when currency is unknown. order specific
example: PERSON_HOME_ADDRESS_COUNTRY
items:
$ref: '#/definitions/SmartCurrencyOption'
smartCurrencyDefault:
type: string
description: The default currency to use when currency is unknown and there are no options set in smartCurrencyOptions
example: USD
requiredJobFields:
type: array
description: Org configuration for required job fields
uniqueItems: true
items:
type: string
scenarioApprovalChains:
type: object
description: Configures which approval chains to use with specific scenario types
additionalProperties:
type: string
example: 588f7ee98f138b19220041a7
isOpenJobRoleApprovalEnabled:
type: boolean
description: Whether to show open job approval on Open Job Profile page
isNotifySubmitterPerStage:
type: boolean
description: Whether to notify the scenario submitter each time an approval stage completes
jobCodeFieldIds:
type: array
description: The set of field IDs that job codes can be set up to auto-fill
items:
type: string
example: 588f7ee98f138b19220041a7
createId:
type: string
description: created by user id
example: 588f7ee98f138b19220041a7
createBehalfId:
type: string
description: created on behalf of user id
example: 588f7ee98f138b19220041a7
createAttribution:
$ref: '#/definitions/Attribution'
createAt:
type: string
description: created timestamp
example: '2017-01-24T13:57:52Z'
updateId:
type: string
description: last updated by user id
example: 588f7ee98f138b19220041a7
updateBehalfId:
type: string
description: last updated on behalf of user id
example: 588f7ee98f138b19220041a7
updateAttribution:
$ref: '#/definitions/Attribution'
updateAt:
type: string
description: last updated timestamp
example: '2017-01-24T13:57:52Z'
deleteId:
type: string
description: deleted by user id
example: 588f7ee98f138b19220041a7
deleteBehalfId:
type: string
description: deleted on behalf of user id
example: 588f7ee98f138b19220041a7
deleteAttribution:
$ref: '#/definitions/Attribution'
deleteAt:
type: string
description: deleted timestamp
example: '2017-01-24T13:57:52Z'
grantConfiguration:
type: array
description: Org Grant Configuration
uniqueItems: true
items:
$ref: '#/definitions/GrantAlias'
InternalOrgOptions:
type: object
properties:
adpOrganizationOID:
type: string
assessmentCount:
type: integer
format: int32
dashboardGettingStartedHidden:
type: boolean
dashboardNeedHelpHidden:
type: boolean
enableUniversalSso:
type: boolean
sequoiaOrgId:
type: string
tosAgreement:
type: boolean
fileUploadLimit:
type: integer
format: int64
maxFileUploadSize:
type: integer
format: int64
lowPriorityReports:
type: boolean
isInitialDataSynced:
type: boolean
maxReportDatapoints:
type: integer
format: int64
disableImportEvents:
type: boolean
description: Whether to disable event notifications on imports -- should only be used temporarily in performance-critical initial imports
useAlphaSlackApp:
type: boolean
description: Use the alpha Slack app (a second real Slack app sharing the global 'slack' install) instead of the default for inbound hooks and outbound messages — ChartHop-staff only, for Slack-team app-review testing
extraFields:
type: object
additionalProperties:
type: object
ExchangeRate:
type: object
required:
- id
- date
- currency
- rates
properties:
id:
type: string
description: globally unique id
example: 588f7ee98f138b19220041a7
orgId:
type: string
description: org id, if an org-specific exchange rate is in use
example: 588f7ee98f138b19220041a7
date:
type: string
format: date
description: date
currency:
type: string
description: base currency
rates:
type: object
description: exchange rates, per currency - the multiplier to convert the base currency into the foreign currency
additionalProperties:
type: number
updateAt:
type: string
description: updated timestamp
example: '2017-01-24T13:57:52Z'
StartingSalaryConfig:
type: object
required:
- type
- effectiveDate
properties:
type:
type: string
description: Starting salary calculation type
enum:
- BAND_MINIMUM
- BAND_QUARTER
- BAND_MIDPOINT
- CUSTOM_PERCENTILE
customPercentile:
type: integer
format: int32
description: Custom percentile value (0-100) when type is CUSTOM_PERCENTILE
effectiveDate:
type: string
format: date
description: Effective date for this configuration
includeEquityTarget:
type: boolean
description: Whether to include equity target in starting compensation
includeVariableComp:
type: boolean
description: Whether to include variable compensation in starting compensation
GrantAlias:
type: object
required:
- grantType
- enabled
properties:
alias:
type: string
grantType:
type: string
enum:
- ISO
- NSO
- RSU
- SAR
- PERFORMANCE_SHARES
- PHANTOM_STOCK
- RSA
enabled:
type: boolean
Customer:
type: object
required:
- id
- name
- status
properties:
id:
type: string
description: unique id of customer
example: 588f7ee98f138b19220041a7
name:
type: string
description: name of customer
email:
type: string
description: email address for billing purposes
billAddress:
description: mailing address for billing purposes
$ref: '#/definitions/Address'
industry:
type: string
description: industry that customer is in
source:
type: string
description: source of customer signup
enum:
- ADP_MARKETPLACE
- SELF_SERVE
- SELF_SERVE_TEST
- SEQUOIA_ONE
- CONNECT
status:
type: string
description: current status
enum:
- ACTIVE
- INACTIVE
- TRIAL
- CHURN
- PAYMENT_ERROR
stripeCustomerId:
type: string
description: stripe customer id
salesforceAccountId:
type: string
description: salesforce account id
pattern: ^[a-zA-Z0-9]{15}|[a-zA-Z0-9]{18}$
products:
type: array
description: products that this customer has purchased
items:
$ref: '#/definitions/ProductItem'
trialProducts:
type: array
description: products this customer has temporary trial access to, each bounded by a date range
items:
$ref: '#/definitions/TrialProduct'
restrictedFeatures:
type: array
description: features that are restricted for the customer
items:
type: string
enum:
- AI_ACTION
- AI_AGENT
- AI_API_WRITE
- AI_SLACK_TEAM_CHAT
- ATS_SYNC
- BUDGET
- COMPENSATION_REVIEW
- CUSTOM_CALENDAR
- CUSTOM_FIELD
- CUSTOM_FIELD_READONLY
- CUSTOM_FORM
- CUSTOM_PROFILE_TAB
- CUSTOM_ROLE
- FORM_ANONYMOUS
- FORM_RELEASE
- FORM_SIGNATURE
- GOAL
- MULTI_PAYROLL
- PERFORMANCE_REVIEW
- REPORT
- REPORT_READONLY
- SCENARIO
- SIGNATURE
- SIGNATURE_QES
- SIMPLE_WORKFLOWS
- SURVEY
- TABLE
- TEMPLATE
- WORKDAY_ADAPTIVE
- PAYROLL_OUTBOUND
- APPROVAL_WORKFLOWS
- CONTENT
- IDENTITY_OUTBOUND
- ONBOARDING_OFFBOARDING
- TIMEOFF
featureOptionOverrides:
type: array
description: override feature options for the customer
items:
$ref: '#/definitions/FeatureAccessOption'
startDate:
type: string
format: date
description: initial date of billing
endDate:
type: string
format: date
description: end of service date for churning customers -- on or after this date, service should be disabled
nextInvoiceDate:
type: string
format: date
description: date of next invoice
orgCount:
type: integer
format: int32
description: number of orgs covered by this customer
primaryHeadCount:
type: integer
format: int32
description: number of total headcount across all orgs
secondaryHeadCount:
type: integer
format: int32
description: number of total headcount across all orgs
tertiaryHeadCount:
type: integer
format: int32
description: number of total headcount across all orgs
primaryHeadCountFilter:
type: string
description: primary headcount filter - used for billing purposes
secondaryHeadCountFilter:
type: string
description: secondary headcount filter - used for billing purposes
tertiaryHeadCountFilter:
type: string
description: tertiary headcount filter - used for billing purposes
arr:
type: number
description: current ARR of the customer based on most recent invoice
trialStartDate:
type: string
format: date
description: date this customer begins their trial period
trialEndDate:
type: string
format: date
description: date this customer ends their trial period
stripeSubscriptionSync:
type: string
description: Stripe subscription settings
enum:
- SYNC
- DELETE
createAt:
type: string
description: created timestamp
example: '2017-01-24T13:57:52Z'
createId:
type: string
description: created by
example: 588f7ee98f138b19220041a7
createBehalfId:
type: string
description: created on behalf of user id
example: 588f7ee98f138b19220041a7
createAttribution:
$ref: '#/definitions/Attribution'
updateAt:
type: string
description: updated timestamp
example: '2017-01-24T13:57:52Z'
updateId:
type: string
description: updated by
example: 588f7ee98f138b19220041a7
updateBehalfId:
type: string
description: last updated on behalf of user id
example: 588f7ee98f138b19220041a7
updateAttribution:
$ref: '#/definitions/Attribution'
LayoutRow:
type: object
required:
- columns
- format
properties:
columns:
type: array
items:
$ref: '#/definitions/LayoutColumn'
format:
type: string
Translations:
type: object
required:
- values
properties:
values:
type: object
additionalProperties:
type: string
FieldOptions:
type: object
properties:
min:
type: string
description: minimum value, for numeric and date fields
max:
type: string
description: maximum value, for numeric and date fields
minItems:
type: integer
format: int32
maxItems:
type: integer
format: int32
stackRank:
type: boolean
step:
type: number
enableEditDialog:
type: boolean
requiredJobField:
type: boolean
excludeTargetPersonId:
type: boolean
maxLength:
type: integer
format: int32
readOnly:
type: boolean
includeFormer:
type: boolean
effectiveDated:
type: boolean
unique:
type: boolean
required:
type: boolean
Role:
type: object
required:
- id
- label
properties:
id:
type: string
description: globally unique id
example: 588f7ee98f138b19220041a7
orgId:
type: string
description: parent organization id (empty if global)
example: 588f7ee98f138b19220041a7
label:
type: string
description: human-readable full name of role
example: Engineering People Manager
minItems: 3
maxItems: 80
description:
type: string
description: description of role
example: This role is able to create and update new job data for the engineering department.
minItems: 0
maxItems: 1000
policyIds:
type: array
description: the policies that define the role
uniqueItems: true
items:
type: string
example: 588f7ee98f138b19220041a7
policies:
type: array
description: the policies attached to the role
uniqueItems: true
items:
$ref: '#/definitions/Policy'
users:
type: array
description: the users the role is attached to
uniqueItems: true
items:
$ref: '#/definitions/User'
userCount:
type: integer
format: int32
description: number of users the role is attached to; populated when expand=true on the list endpoint
createId:
type: string
description: created by user id
example: 588f7ee98f138b19220041a7
createAt:
type: string
description: created timestamp
example: '2017-01-24T13:57:52Z'
updateId:
type: string
description: last updated by user id
example: 588f7ee98f138b19220041a7
updateAt:
type: string
description: last updated timestamp
example: '2017-01-24T13:57:52Z'
deleteId:
type: string
description: deleted by user id
example: 588f7ee98f138b19220041a7
deleteAt:
type: string
description: deleted timestamp
example: '2017-01-24T13:57:52Z'
User:
type: object
required:
- id
- name
properties:
id:
type: string
description: globally unique id
example: 588f7ee98f138b19220041a7
appId:
type: string
description: if the user is an app user, the id of the app
example: 588f7ee98f138b19220041a7
name:
description: full name of user
$ref: '#/definitions/Name'
email:
type: string
description: email address of user
example: bob@example.com
minItems: 0
maxItems: 120
password:
type: string
description: password of user (encrypted)
minItems: 0
maxItems: 120
orgs:
type: array
description: list of member orgs with permission levels
uniqueItems: true
items:
$ref: '#/definitions/OrgAccess'
imagePath:
type: string
description: path to full-sized profile image in storage
pattern: ^[a-zA-Z0-9._/-]+$
status:
type: string
description: current status of user
enum:
- SUPERUSER
- NORMAL
- INACTIVE
- UNINSTALLED
type:
type: string
description: type of user
enum:
- USER
- APP
options:
type: object
description: for apps, options (specific options are specific to the particular app); for users, user-set preferences
internalOptions:
type: object
description: internal (ChartHop controlled) options
bundleInstall:
description: if this user represents an installed bundle, details on what was installed
$ref: '#/definitions/BundleInstall'
secrets:
type: object
description: write-only secrets; the content of these secrets are not retrievable via the external-facing API
activeAt:
type: string
description: last activity timestamp
example: '2017-01-24T13:57:52Z'
loginAt:
type: string
description: last login timestamp
example: '2017-01-24T13:57:52Z'
appRunCheckAt:
type: string
description: for apps, last time the app was checked for a scheduled sync
example: '2024-02-29T09:30:00Z'
loginCount:
type: integer
format: int32
description: number of lifetime successful logins
example: '3'
sessionCount:
type: integer
format: int32
description: number of lifetime sessions
example: '3'
loginFailCount:
type: integer
format: int32
description: number of consecutive failed logins
example: '3'
title:
type: string
description: job title, if available
example: CEO
remoteIp:
type: string
description: last IP address used
example: 127.0.0.1
createId:
type: string
description: created by user id
example: 588f7ee98f138b19220041a7
createBehalfId:
type: string
description: created on behalf of user id
example: 588f7ee98f138b19220041a7
createAttribution:
$ref: '#/definitions/Attribution'
createAt:
type: string
description: created timestamp
example: '2017-01-24T13:57:52Z'
updateId:
type: string
description: last updated by user id
example: 588f7ee98f138b19220041a7
updateBehalfId:
type: string
description: last updated on behalf of user id
example: 588f7ee98f138b19220041a7
updateAttribution:
$ref: '#/definitions/Attribution'
updateAt:
type: string
description: last updated timestamp
example: '2017-01-24T13:57:52Z'
verifyAt:
type: string
description: email verified timestamp, if the email has been verified
example: '2017-01-24T13:57:52Z'
mfas:
type: array
description: list of registered 2FA registered credentials
items:
$ref: '#/definitions/WebRegisteredCredential'
emailSettings:
type: array
description: Email settings for the user
items:
$ref: '#/definitions/UserEmailSetting'
sensitive:
type: string
description: sensitivity level of the user's configuration; only applicable to APP users
enum:
- GLOBAL
- ORG
- SENSITIVE
- PERSONAL
- MANAGER
- HIGH
- PRIVATE
shareAccess:
type: array
description: users and groups who have access to configure this user; only applicable to APP users
items:
$ref: '#/definitions/ShareAccess'
agentConfig:
description: per-user agent configuration overrides
$ref: '#/definitions/AiAgentConfig'
FeatureAccessOption:
type: object
required:
- name
- type
properties:
name:
type: string
description: The name of the feature option tied to the feature access
example: smart_fields
enum:
- CONFIGURED_ROLES
- SMART_FIELDS
- APP_FIELD_MAPPERS
- MULTI_PAYROLL_INSTALLS
description:
type: string
description: The description of the feature option
type:
type: string
description: The feature option type
enum:
- LIMIT
- FULL_ACCESS
limit:
type: integer
format: int32
description: The feature option limit
ProductItem:
type: object
required:
- productId
- stripePriceId
properties:
productId:
type: string
example: 588f7ee98f138b19220041a7
stripePriceId:
type: string
AiAgentConfig:
type: object
properties:
personality:
type: string
instructions:
type: string
guardrails:
type: string
enableMemory:
type: boolean
enableMcpServer:
type: boolean
description: whether this agent exposes an MCP server endpoint for per-user OAuth access
enableMcpWrite:
type: boolean
description: '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:
type: boolean
description: '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:
type: array
items:
$ref: '#/definitions/PolicyRule'
approvalGuidelines:
type: string
managerJobId:
type: string
example: 588f7ee98f138b19220041a7
messagingConfig:
$ref: '#/definitions/MessagingConfig'
contentIds:
type: array
description: pinned content document IDs; when merging user and app configs, both lists are unioned (not replaced); validate with validateContentIds before persisting
items:
type: string
example: 588f7ee98f138b19220041a7
modelTier:
type: string
description: requested model tier for the agent; defaults to MEDIUM when not set
enum:
- HIGH
- MEDIUM
- LOW
targetedInstructions:
type: array
description: 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
items:
$ref: '#/definitions/TargetedInstruction'
CustomerDetails:
type: object
required:
- actionRequired
properties:
actionRequired:
type: array
description: Action required by the client
items:
type: string
partnershipApp:
type: string
description: Partnership App
BundleInstallEntity:
type: object
required:
- entityType
- entityId
- originalId
properties:
entityType:
type: string
enum:
- ACTION
- CALENDAR
- CALENDAR_ENTRY
- CATEGORY
- FIELD
- FORM
- GROUP
- PROFILE_TAB
- QUESTION
- REPORT
- REPORT_CHART
- TASK_CONFIG
- TEMPLATE
- TIME_OFF_POLICY
- CONTENT
entityId:
type: string
example: 588f7ee98f138b19220041a7
originalId:
type: string
example: 588f7ee98f138b19220041a7
TableRef:
type: object
properties:
tableId:
type: string
description: the table id this field references
example: 588f7ee98f138b19220041a7
tableName:
type: string
description: the table name this field references
PayInterval:
type: object
required:
- interval
- pay
properties:
interval:
type: string
description: Interval (annual or hourly)
enum:
- YEARLY
- MONTHLY
- WEEKLY
- DAILY
- HOURLY
pay:
description: Pay over the given interval
$ref: '#/definitions/Money'
hoursPerWeek:
type: integer
format: int32
description: working hours per week if interval=hourly
example: '40'
weeksPerYear:
type: integer
format: int32
description: working weeks per year if interval=hourly
example: '52'
monthsPerYear:
type: integer
format: int32
description: months per year if interval=month
example: '52'
daysPerYear:
type: integer
format: int32
description: days per year if interval=day
example: '250'
FormEditAccess:
type: object
properties:
allow:
type: string
enum:
- ALWAYS
- WHILE_PROPOSED
- UNTIL_ACTIVE
- WHILE_ASSESSMENT_ACTIVE
- TIME_LIMIT
timeLimitSecs:
type: integer
format: int64
OrgStockData:
type: object
properties:
strikePrice:
type: number
grantPrice:
type: number
totalShares:
type: integer
format: int64
Layout:
type: object
required:
- rows
properties:
rows:
type: array
items:
$ref: '#/definitions/LayoutRow'
Field:
type: object
required:
- id
- name
- label
- type
- plural
- isUnique
- isRequired
- sensitive
properties:
id:
type: string
description: globally unique id
example: 588f7ee98f138b19220041a7
orgId:
type: string
description: parent organization id (empty if global)
example: 588f7ee98f138b19220041a7
name:
type: string
description: short field name
example: summary
pattern: ^[a-zA-Z][a-zA-Z0-9_]+$
minItems: 3
maxItems: 32
label:
type: string
description: human-readable full name of field
example: Job Summary
minItems: 3
maxItems: 80
labelTr:
description: translations for the human-reada
# --- truncated at 32 KB (117 KB total) ---
# Full source: https://raw.githubusercontent.com/api-evangelist/charthop/refs/heads/main/openapi/charthop-preload-api-openapi.yml