Charthop change API
The change API from Charthop — 14 operation(s) for change.
The change API from Charthop — 14 operation(s) for change.
swagger: '2.0'
info:
description: REST API for ChartHop
version: V1.0.0
title: ChartHop access change 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: change
paths:
/v1/org/{orgId}/change:
get:
tags:
- change
summary: Return recent changes across an org, or for a particular person or job
operationId: findChanges
consumes:
- application/json
produces:
- application/json
parameters:
- name: orgId
in: path
description: Org identifier (either id or slug)
required: true
type: string
- name: scenarioId
in: query
description: Scenario id
required: false
type: string
- name: date
in: query
description: Date to start from
required: false
type: string
format: date
- name: untilDate
in: query
description: Date to get changes through (exclusive)
required: false
type: string
format: date
- name: type
in: query
description: Types of change to filter by
required: false
type: string
- name: fields
in: query
description: Return changes that modify these fields
required: false
type: string
- name: personId
in: query
description: Person id to filter by
required: false
type: string
- name: jobId
in: query
description: Job id to filter by
required: false
type: string
- name: includeBackfill
in: query
description: Find and include first backfill if it exists
required: false
type: boolean
- name: refs
in: query
description: References to filter by
required: false
type: string
- name: q
in: query
description: Query to filter against
required: false
type: string
- name: from
in: query
description: Change id to start paginating from
required: false
type: string
- name: limit
in: query
description: Number of results to return
required: false
type: integer
format: int32
- name: open
in: query
description: Whether the role is open or not
required: false
type: string
enum:
- FILLED
- OPEN
- name: desc
in: query
description: Descending (default false)
required: false
type: boolean
- name: scenarioOnly
in: query
description: Scenario only (exclude primary changes)
required: false
type: boolean
- name: parentOnly
in: query
description: Parent changes only (exclude child changes)
required: false
type: boolean
- name: excludeAtsRecruitingFields
in: query
description: Whether to exclude ats recruiting fields. Only applies when fieldEntityTypeString is passed
required: false
type: boolean
- name: includeStruck
in: query
description: Deprecated parameter for backwards-compatibility (use statuses) - whether to include STRUCK and PROPOSED changes, or just ACTIVE changes
required: false
type: boolean
- name: status
in: query
description: Statuses to filter by
required: false
type: string
- name: stripUpdates
in: query
description: Whether to strip returned update changes of update types that were not explicitly requested
required: false
type: boolean
- name: format
in: query
description: Data format to use; default is json, can also use json-extended or json-readable
required: false
type: string
- name: fieldEntityTypes
in: query
description: Only return changes which set fields with these entity types
required: false
type: string
- name: returnAccess
in: query
description: 'Return access information -- pass a list of actions to check, for example: create,update,delete'
required: false
type: string
responses:
'200':
description: successful operation
schema:
$ref: '#/definitions/ResultsChange'
'400':
description: bad request
'401':
description: not authorized
'404':
description: not found
/v1/org/{orgId}/change/bulkchange:
post:
tags:
- change
summary: Perform a series of changes at once
operationId: bulkChange
consumes:
- application/json
produces:
- application/json
parameters:
- name: orgId
in: path
description: Org identifier (either id or slug)
required: true
type: string
- name: body
in: body
description: Bulk change data
required: false
schema:
$ref: '#/definitions/BulkChangeRequest'
responses:
'200':
description: successful operation
schema:
$ref: '#/definitions/Process'
'400':
description: bad request
'404':
description: not found
/v1/org/{orgId}/change/bulkupdate:
post:
tags:
- change
summary: Perform a bulk update on a number of jobs
operationId: bulkUpdate
consumes:
- application/json
produces:
- application/json
parameters:
- name: orgId
in: path
description: Org identifier (either id or slug)
required: true
type: string
- name: body
in: body
description: Bulk update data
required: false
schema:
$ref: '#/definitions/BulkUpdateRequest'
responses:
'200':
description: successful operation
schema:
$ref: '#/definitions/Process'
'400':
description: bad request
'404':
description: not found
/v1/org/{orgId}/change/compensation-history:
get:
tags:
- change
summary: Return enriched compensation history rows (one row per comp change), in descending date order
operationId: findCompensationHistory
consumes:
- application/json
produces:
- application/json
parameters:
- name: orgId
in: path
description: Org identifier (either id or slug)
required: true
type: string
- name: startDate
in: query
description: Date to start from
required: false
type: string
format: date
- name: endDate
in: query
description: Date to get changes through (inclusive)
required: false
type: string
format: date
- name: q
in: query
description: Filter query string
required: false
type: string
- name: from
in: query
description: Cursor for paginating from a previous response
required: false
type: integer
format: int64
- name: limit
in: query
description: Number of results to return
required: false
type: integer
format: int32
- name: format
in: query
description: Data format to use; default is json, can also use json-extended or json-readable
required: false
type: string
responses:
'200':
description: successful operation
schema:
$ref: '#/definitions/ResultsCompensationHistoryRow'
'400':
description: bad request
'401':
description: not authorized
'404':
description: not found
/v1/org/{orgId}/change/depart-rehire:
post:
tags:
- change
summary: Create a depart-rehire pair of changes, for filling in historical data
operationId: departRehire
consumes:
- application/json
produces:
- application/json
parameters:
- name: orgId
in: path
description: Org identifier (either id or slug)
required: true
type: string
- name: startDate
in: query
description: Rehire start date
required: false
type: string
format: date
- name: body
in: body
description: Depart data
required: true
schema:
$ref: '#/definitions/CreateChange'
responses:
'202':
description: accepted
'400':
description: bad request
'404':
description: not found
/v1/org/{orgId}/change/scenario/{scenarioId}:
get:
tags:
- change
summary: Return all changes for a particular scenario, with before job
operationId: findScenarioChanges
consumes:
- application/json
produces:
- application/json
parameters:
- name: orgId
in: path
description: Org identifier (either id or slug)
required: true
type: string
- name: scenarioId
in: path
description: Scenario id
required: true
type: string
- name: fields
in: query
description: Fields to retrieve
required: false
type: string
- name: format
in: query
description: Data format to use; default is json, can also use json-extended or json-readable
required: false
type: string
- name: q
in: query
description: Search query
required: false
type: string
- name: returnAccess
in: query
description: 'Return access information -- pass a list of actions to check, for example: create,update,delete'
required: false
type: string
responses:
'200':
description: successful operation
schema:
$ref: '#/definitions/ScenarioChangesWithBudgetRollup'
'400':
description: bad request
'401':
description: not authorized
'404':
description: not found
/v1/org/{orgId}/change/sync/{type}:
post:
tags:
- change
summary: Sync a change (create the change only if it does not already exist)
operationId: syncChange
consumes:
- application/json
produces:
- application/json
parameters:
- name: orgId
in: path
description: Org identifier (either id or slug)
required: true
type: string
- name: type
in: path
description: Change type
required: true
type: string
- name: body
in: body
description: Change data
required: false
schema:
$ref: '#/definitions/CreateChange'
- name: processId
in: query
description: Process id of person creation
required: false
type: string
responses:
'200':
description: synced change
schema:
$ref: '#/definitions/Change'
'400':
description: bad request
'404':
description: not found
/v1/org/{orgId}/change/{changeId}:
get:
tags:
- change
summary: Return a particular change by id
operationId: getChange
consumes:
- application/json
produces:
- application/json
parameters:
- name: orgId
in: path
description: Org identifier (either id or slug)
required: true
type: string
- name: changeId
in: path
description: Change id
required: true
type: string
- name: format
in: query
description: Data format to use; default is json, can also use json-extended or json-readable
required: false
type: string
responses:
'200':
description: successful operation
schema:
$ref: '#/definitions/Change'
'400':
description: bad request
'404':
description: not found
patch:
tags:
- change
summary: Make a change to a change
operationId: updateChange
consumes:
- application/json
produces:
- application/json
parameters:
- name: orgId
in: path
description: Org identifier (either id or slug)
required: true
type: string
- name: changeId
in: path
description: Change id
required: true
type: string
- name: body
in: body
description: Change data
required: true
schema:
$ref: '#/definitions/UpdateChange'
- name: processId
in: query
description: Process id of person creation
required: false
type: string
responses:
'204':
description: no content
'400':
description: bad request
'404':
description: not found
delete:
tags:
- change
summary: Delete a previous change
operationId: deleteChange
consumes:
- application/json
produces:
- application/json
parameters:
- name: orgId
in: path
description: Org identifier (either id or slug)
required: true
type: string
- name: changeId
in: path
description: Change id
required: true
type: string
- name: processId
in: query
description: Process id of person creation
required: false
type: string
responses:
'400':
description: bad request
'404':
description: not found
/v1/org/{orgId}/change/{changeId}/approve:
post:
tags:
- change
summary: Approve or reject a change
operationId: approveChange
consumes:
- application/json
produces:
- application/json
parameters:
- name: orgId
in: path
description: Org identifier (either id or slug)
required: true
type: string
- name: changeId
in: path
description: Change id
required: true
type: string
- name: body
in: body
description: Change approval details
required: true
schema:
$ref: '#/definitions/ApproveChange'
responses:
'204':
description: no content
'400':
description: bad request
'404':
description: not found
/v1/org/{orgId}/change/{changeId}/approver:
get:
tags:
- change
summary: Given a of change id, see if the person can approve/reject
operationId: changeApprover
consumes:
- application/json
produces:
- application/json
parameters:
- name: orgId
in: path
description: Org identifier (either id or slug)
required: true
type: string
- name: changeId
in: path
description: Change Id
required: true
type: string
- name: date
in: query
description: Date to check the approval on
required: false
type: string
format: date
responses:
'200':
description: successful operation
schema:
type: boolean
'400':
description: bad request
'401':
description: not authorized
'404':
description: not found
/v1/org/{orgId}/change/{type}:
post:
tags:
- change
summary: Create a new change
operationId: createChange
consumes:
- application/json
produces:
- application/json
parameters:
- name: orgId
in: path
description: Org identifier (either id or slug)
required: true
type: string
- name: type
in: path
description: Change type
required: true
type: string
- name: body
in: body
description: Change data
required: false
schema:
$ref: '#/definitions/CreateChange'
- name: source
in: query
description: Source of change
required: false
type: string
- name: processId
in: query
description: Process id of change creation
required: false
type: string
responses:
'201':
description: created change
schema:
$ref: '#/definitions/Change'
'400':
description: bad request
'404':
description: not found
/v1/org/{orgId}/change/{type}/validate:
post:
tags:
- change
summary: Validate a change
operationId: validateChange
consumes:
- application/json
produces:
- application/json
parameters:
- name: orgId
in: path
description: Org identifier (either id or slug)
required: true
type: string
- name: type
in: path
description: Change type
required: true
type: string
- name: body
in: body
description: Change data
required: false
schema:
$ref: '#/definitions/CreateChange'
responses:
'400':
description: bad request
'404':
description: not found
/v1/org/{orgId}/scenario/{scenarioId}/change/{changeId}:
patch:
tags:
- change
summary: Amend a change within a scenario, and potentially return the updated data
operationId: updateScenarioChange
consumes:
- application/json
produces:
- application/json
parameters:
- name: orgId
in: path
description: Org identifier (either id or slug)
required: true
type: string
- name: scenarioId
in: path
description: Scenario id
required: true
type: string
- name: changeId
in: path
description: Change id
required: true
type: string
- name: fields
in: query
description: Fields to retrieve
required: false
type: string
- name: includeUpdatedFields
in: query
description: Include all updated fields in the response, including change.after.fieldName for each updated field
required: false
type: boolean
- name: format
in: query
description: Data format to return; default is json, can also use json-extended or json-readable
required: false
type: string
- name: body
in: body
description: Column and data to update (must contain only one entry)
required: true
schema:
type: object
additionalProperties:
type: object
responses:
'200':
description: successful operation
schema:
$ref: '#/definitions/UpdateScenarioChangeResponse'
'204':
description: no content
'400':
description: bad request
'404':
description: not found
/v1/org/{orgId}/scenario/{scenarioId}/change/{changeId}/status/{processId}:
get:
tags:
- change
summary: Get the status of a running change within a scenario
operationId: getChangeStatus
consumes:
- application/json
produces:
- application/json
parameters:
- name: orgId
in: path
description: Org identifier (either id or slug)
required: true
type: string
- name: scenarioId
in: path
description: Scenario id
required: true
type: string
- name: changeId
in: path
description: Change id
required: true
type: string
- name: processId
in: path
description: Process id
required: true
type: integer
format: int32
responses:
'200':
description: successful operation
schema:
$ref: '#/definitions/ChangeStatusResponse'
'404':
description: not found
definitions:
LogData:
type: object
required:
- level
- at
- data
properties:
level:
type: string
enum:
- INFO
- WARN
- ERROR
at:
type: string
description: created timestamp
example: '2017-01-24T13:57:52Z'
message:
type: string
data:
type: object
additionalProperties:
type: object
JobRelationship:
type: object
required:
- jobId
- type
properties:
jobId:
type: string
description: destination job id
example: 5887a7718f138b6a2a0041a7
type:
type: string
description: type of relationship
enum:
- MANAGER
- DIRECT
- INDIRECT_MANAGER
- INDIRECT
- NONE
JobUpdate:
type: object
properties:
addRelationships:
type: array
description: relationships to add
uniqueItems: true
items:
$ref: '#/definitions/JobRelationship'
removeRelationships:
type: array
description: relationships to remove
uniqueItems: true
items:
$ref: '#/definitions/JobRelationship'
addGroupIds:
type: array
description: groups to add
uniqueItems: true
items:
type: string
example: 588f7ee98f138b19220041a7
removeGroupIds:
type: array
description: groups to remove
uniqueItems: true
items:
type: string
example: 588f7ee98f138b19220041a7
setGroupIds:
type: object
description: groups to set
additionalProperties:
type: string
example: 588f7ee98f138b19220041a7
grant:
description: stock grant to add
$ref: '#/definitions/StockGrant'
timeOff:
description: time off to add
$ref: '#/definitions/TimeOff'
title:
type: string
description: new title
minItems: 1
maxItems: 160
comp:
description: new compensation level
$ref: '#/definitions/Comp'
placement:
type: string
description: new placement
enum:
- NORMAL
- ASSISTANT
employment:
type: string
description: new employment status
enum:
- FULL
- PART
- TEMP
- CONTRACT
- INTERN
- EXPAT
sensitive:
type: string
description: new view sensitivity
enum:
- GLOBAL
- ORG
- SENSITIVE
- PERSONAL
- MANAGER
- HIGH
- PRIVATE
startDatePlanned:
type: string
format: date
description: planned start date
startDatePlannedRemove:
type: boolean
description: remove planned start date. if both startDatePlanned and startDatePlannedRemove are set, startDatePlanned takes precedence
startDate:
type: string
format: date
description: new expected start date - will update to person start date in future
backfillPersonId:
type: string
description: set who this job is backfilling
example: 588f7ee98f138b19220041a7
jobCodeId:
type: string
description: set (or unset) the job code for this job
example: 588f7ee98f138b19220041a7
hasUnsetFields:
type: boolean
description: set who this job is backfilling
fields:
type: object
description: custom fields values to set
additionalProperties:
type: object
ResultsChangeData:
type: object
required:
- data
properties:
data:
type: array
items:
$ref: '#/definitions/ChangeData'
next:
type: string
access:
type: array
items:
$ref: '#/definitions/ResultsAccess'
CreateChange:
type: object
properties:
jobId:
type: string
description: job id
example: 588f7ee98f138b19220041a7
orgId:
type: string
description: parent organization id
example: 588f7ee98f138b19220041a7
scenarioId:
type: string
description: scenario that this change belongs to
example: 588f7ee98f138b19220041a7
personId:
type: string
description: the id of the person involved, or empty if no person attached to job
example: 588f7ee98f138b19220041a7
otherJobId:
type: string
description: for MOVE changes, the id of the job moving from; for RELATE changes, the id of the other job
example: 588f7ee98f138b19220041a7
type:
type: string
description: type of change
enum:
- HIRE
- DEPART
- MOVE
- UPCOMING
- CREATE
- UPDATE
- DATA
- DELETE
- RELATE
- BACKFILL
date:
type: string
format: date
description: date of change
announceDate:
type: string
format: date
description: for HIRE and DEPART changes, the announce date, if the announce date is different from the date of change
departType:
type: string
description: for DEPART changes, the type of departure
enum:
- VOLUNTARY
- INVOLUNTARY
departRegret:
type: string
description: for DEPART changes, whether the departure is regrettable
enum:
- REGRET
- NONREGRET
reason:
type: string
description: the reason of the change
promotionType:
type: string
description: if it's a promotion or a demotion
enum:
- PROMOTION
- DEMOTION
- NONE
job:
description: for CREATE changes, the initial job data; for other changes, the title and groups at the time of change
$ref: '#/definitions/PartialJob'
update:
description: for UPDATE changes, the data being updated
$ref: '#/definitions/JobUpdate'
note:
type: string
description: note on the change
mergeId:
type: string
description: merged by user id, if this change was merged
example: 588f7ee98f138b19220041a7
mergeScenarioId:
type: string
description: scenario that this change was merged in from, if the change originally came from a scenario
example: 588f7ee98f138b19220041a7
overrideDefaults:
type: object
description: for job code linked field overrides, records the default job code value
additionalProperties:
type: object
autoAppliedDefaults:
type: object
description: for job code linked fields, records which fields were auto-populated from defaults
additionalProperties:
type: object
AccessAction:
type: object
required:
- action
properties:
action:
type: string
fields:
type: array
uniqueItems: true
items:
type: string
types:
type: array
uniqueItems: true
items:
type: string
Process:
type: object
required:
- id
- orgId
- label
- type
- status
- runUserId
- createId
- createAt
- options
properties:
id:
type: string
description: globally unique id
example: 588f7ee98f138b19220041a7
orgId:
type: string
description: parent org id
example: 588f7ee98f138b19220041a7
label:
type: string
description: human-readable label that identifies this process
type:
type: string
description: process type
status:
type: string
description: current status of process
enum:
- PENDING
- RUNNING
- DONE
- ERROR
filePath:
type: string
description: data file path
logPath:
type: string
description: data log path
runUserId:
type: string
description: user id who is running the process
example: 588f7ee98f138b19220041a7
parentProcessId:
type: string
description: process id of parent process
example: 588f7ee98f138b19220041a7
createId:
type: string
description: created by user id (user who requested the process run)
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'
startAt:
type: string
description: started at timestamp
example: '2017-01-24T13:57:52Z'
endAt:
type: string
description: ended at timestamp
example: '2017-01-24T13:57:52Z'
message:
type: string
description: status or error message
progress:
type: number
format: double
description: percent progress so far
internalError:
type: string
description: internal-only error message
options:
type: object
description: options passed to the process
results:
type: object
description: results summary for the process
additionalProperties:
type: object
logDataList:
type: array
description: list of log data that occurred during running of this process
items:
$ref: '#/definitions/LogData'
state:
type: object
description: process-specific state data
summary:
type: string
description: human-readable, searchable summary of what this process did
appId:
type: string
description: app id of the process
example: 588f7ee98f138b19220041a7
uuid:
type: string
description: unique ID of the process at queue time
example: 84db3c6e-0877-4436-8af1-768c06b29586
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'
BulkUpdateRequest:
type: object
required:
- jobIds
- update
- date
properties:
jobIds:
type: array
description: list of job ids to update
uniqueItems: true
items:
type: string
example: 588f7ee98f138b19220041a7
update:
description: update to perform
$ref: '#/definitions/JobUpdate'
date:
type: string
format: date
description: date of update
scenarioId:
type: string
description: scenario id
example: 588f7ee98f138b19220041a7
note:
type: string
# --- truncated at 32 KB (55 KB total) ---
# Full source: https://raw.githubusercontent.com/api-evangelist/charthop/refs/heads/main/openapi/charthop-change-api-openapi.yml