Charthop goal API
The goal API from Charthop — 5 operation(s) for goal.
The goal API from Charthop — 5 operation(s) for goal.
swagger: '2.0'
info:
description: REST API for ChartHop
version: V1.0.0
title: ChartHop access goal 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: goal
paths:
/v1/org/{orgId}/goal:
get:
tags:
- goal
summary: Find goals
operationId: findGoals
consumes:
- application/json
produces:
- application/json
parameters:
- name: orgId
in: path
description: Org identifier (either id or slug)
required: true
type: string
- name: personId
in: query
description: Person id to filter goals by (owner or support)
required: false
type: string
- name: groupId
in: query
description: Group id to filter goals by
required: false
type: string
- name: personFilter
in: query
description: Person filter
required: false
type: string
- name: originalGoalId
in: query
description: Original goal id to filter by
required: false
type: string
- name: date
in: query
description: Date to filter goals as-of
required: false
type: string
format: date
- name: fromId
in: query
description: Starting goal id for pagination
required: false
type: string
- name: limit
in: query
description: Number of results to return
required: false
type: integer
format: int32
- 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/ResultsGoal'
'400':
description: bad request
'401':
description: not authorized
'404':
description: not found
post:
tags:
- goal
summary: Create a new goal
operationId: createGoal
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: Goal data to create
required: true
schema:
$ref: '#/definitions/CreateGoal'
responses:
'201':
description: created
schema:
$ref: '#/definitions/Goal'
'400':
description: invalid data
'401':
description: not authorized
'403':
description: permission denied
'404':
description: org not found
/v1/org/{orgId}/goal/export:
post:
tags:
- goal
summary: Export goals to CSV format
operationId: exportGoals
consumes:
- application/json
produces:
- application/json
parameters:
- name: orgId
in: path
description: Org identifier (either id or slug)
required: true
type: string
- name: date
in: query
description: Date to filter goals as-of
required: false
type: string
format: date
- name: personFilter
in: query
description: Person filter
required: false
type: string
- name: format
in: query
description: Output format (e.g. readable for friendly column headers)
required: false
type: string
responses:
'201':
description: process started
schema:
$ref: '#/definitions/Process'
'401':
description: not authorized
'403':
description: permission denied
'404':
description: not found
/v1/org/{orgId}/goal/{goalId}:
get:
tags:
- goal
summary: Get a goal by id
operationId: getGoal
consumes:
- application/json
produces:
- application/json
parameters:
- name: orgId
in: path
description: Org identifier (either id or slug)
required: true
type: string
- name: goalId
in: path
description: Goal id
required: true
type: string
responses:
'200':
description: ok
schema:
$ref: '#/definitions/Goal'
'400':
description: bad request
'401':
description: not authorized
'404':
description: not found
patch:
tags:
- goal
summary: Update an existing goal
operationId: updateGoal
consumes:
- application/json
produces:
- application/json
parameters:
- name: orgId
in: path
description: Org identifier (either id or slug)
required: true
type: string
- name: goalId
in: path
description: Goal id
required: true
type: string
- name: body
in: body
description: Goal data to update
required: true
schema:
$ref: '#/definitions/UpdateGoal'
responses:
'200':
description: updated
schema:
$ref: '#/definitions/Goal'
'400':
description: invalid data
'401':
description: not authorized
'403':
description: permission denied
'404':
description: not found
delete:
tags:
- goal
summary: Delete a goal
operationId: deleteGoal
consumes:
- application/json
produces:
- application/json
parameters:
- name: orgId
in: path
description: Org identifier (either id or slug)
required: true
type: string
- name: goalId
in: path
description: Goal id
required: true
type: string
responses:
'204':
description: deleted
'400':
description: invalid data
'401':
description: not authorized
'403':
description: permission denied
'404':
description: not found
/v1/org/{orgId}/goal/{goalId}/copy:
post:
tags:
- goal
summary: Copy a goal and its targets into a new goal
operationId: copyGoal
consumes:
- application/json
produces:
- application/json
parameters:
- name: orgId
in: path
description: Org identifier (either id or slug)
required: true
type: string
- name: goalId
in: path
description: Goal id to copy
required: true
type: string
- name: body
in: body
description: Optional property overrides for the copied goal
required: false
schema:
$ref: '#/definitions/UpdateGoal'
responses:
'201':
description: created
schema:
$ref: '#/definitions/Goal'
'400':
description: invalid data
'401':
description: not authorized
'403':
description: permission denied
'404':
description: not found
/v1/org/{orgId}/goal/{goalId}/graph:
get:
tags:
- goal
summary: Find parent and child goals, from a starting goal id
operationId: findGoalsGraph
consumes:
- application/json
produces:
- application/json
parameters:
- name: orgId
in: path
description: Org identifier (either id or slug)
required: true
type: string
- name: goalId
in: path
description: Starting goal id to look upwards and downwards from
required: true
type: string
- name: date
in: query
description: Date to filter goals as-of
required: false
type: string
format: date
- name: depth
in: query
description: Number of levels down to search child goals (defaults to 1)
required: false
type: integer
format: int32
- 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/ResultsGoal'
'400':
description: bad request
'401':
description: not authorized
'404':
description: not found
definitions:
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
Goal:
type: object
required:
- id
- orgId
- status
- goalTypeId
- label
- slug
- startDate
- endDate
- sensitive
- shareAccess
properties:
id:
type: string
description: globally unique id
example: 588f7ee98f138b19220041a7
orgId:
type: string
description: parent organization id
example: 588f7ee98f138b19220041a7
status:
type: string
description: status
enum:
- DRAFT
- ACTIVE
- DONE
goalTypeId:
type: string
description: goal type
example: 588f7ee98f138b19220041a7
parentGoalId:
type: string
description: parent goal id, for cascading goals
example: 588f7ee98f138b19220041a7
originalGoalId:
type: string
description: original goal id, linking this goal to the goal it was copied from
example: 588f7ee98f138b19220041a7
relatedGoalIds:
type: array
description: list of other goals that are related to this goal
items:
type: string
example: 588f7ee98f138b19220041a7
ownerPersonIds:
type: array
description: list of persons who are responsible for this goal
items:
type: string
example: 588f7ee98f138b19220041a7
supportPersonIds:
type: array
description: list of persons who help support this goal
items:
type: string
example: 588f7ee98f138b19220041a7
groupIds:
type: array
description: list of groups who are responsible for this goal
items:
type: string
example: 588f7ee98f138b19220041a7
label:
type: string
description: human-readable name of the goal
example: Increase Revenue at least 10%
slug:
type: string
description: url-safe slug for the goal, auto-generated from label if not provided
description:
type: string
description: human-readable description of the goal
startDate:
type: string
format: date
description: start date for this goal
endDate:
type: string
format: date
description: end date for this goal
sensitive:
type: string
description: sensitivity level of goal
enum:
- GLOBAL
- ORG
- SENSITIVE
- PERSONAL
- MANAGER
- HIGH
- PRIVATE
shareAccess:
type: array
description: users who are specifically granted permission to view or edit this goal
items:
$ref: '#/definitions/ShareAccess'
progressUpdateConfig:
description: configuration for automated progress update reminders
$ref: '#/definitions/GoalProgressUpdateConfig'
progressSummary:
description: overall progress summary, denormalized and calculated periodically
$ref: '#/definitions/GoalProgressSummary'
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'
GoalTargetWithValue:
type: object
required:
- goalTargetId
- label
- value
properties:
goalTargetId:
type: string
example: 588f7ee98f138b19220041a7
label:
type: string
value:
anyOf:
- type: string
- type: number
- type: boolean
color:
type: string
ResultsAccess:
type: object
required:
- allowed
properties:
ids:
type: array
uniqueItems: true
items:
type: string
example: 588f7ee98f138b19220041a7
allowed:
type: array
uniqueItems: true
items:
$ref: '#/definitions/AccessAction'
GoalTargetActual:
type: object
required:
- goalTargetId
properties:
goalTargetId:
type: string
example: 588f7ee98f138b19220041a7
value:
anyOf:
- type: string
- type: number
- type: boolean
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
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
ResultsGoal:
type: object
required:
- data
properties:
data:
type: array
items:
$ref: '#/definitions/Goal'
next:
type: string
access:
type: array
items:
$ref: '#/definitions/ResultsAccess'
GoalProgressForecast:
type: object
required:
- goalTargetId
- type
- value
properties:
goalTargetId:
type: string
example: 588f7ee98f138b19220041a7
type:
type: string
enum:
- WORST
- COMMIT
- CALL
- LIKELY
- BEST
label:
type: string
value:
anyOf:
- type: string
- type: number
- type: boolean
MessageChannelConfig:
type: object
required:
- channels
- alwaysEmail
properties:
channels:
type: array
items:
type: string
enum:
- EMAIL
- CHAT
- CHAT_SLACK
- CHAT_TEAMS
alwaysEmail:
type: boolean
CreateGoal:
type: object
required:
- goalTypeId
- label
- startDate
- endDate
- sensitive
properties:
goalTypeId:
type: string
description: goal type
example: 588f7ee98f138b19220041a7
parentGoalId:
type: string
description: parent goal id, for cascading goals
example: 588f7ee98f138b19220041a7
originalGoalId:
type: string
description: original goal id, linking this goal to the goal it was copied from
example: 588f7ee98f138b19220041a7
relatedGoalIds:
type: array
description: list of other goals that are related to this goal
items:
type: string
example: 588f7ee98f138b19220041a7
ownerPersonIds:
type: array
description: list of persons who are responsible for this goal
items:
type: string
example: 588f7ee98f138b19220041a7
supportPersonIds:
type: array
description: list of persons who help support this goal
items:
type: string
example: 588f7ee98f138b19220041a7
groupIds:
type: array
description: list of groups who are responsible for this goal
items:
type: string
example: 588f7ee98f138b19220041a7
label:
type: string
description: human-readable name of the goal
example: Increase Revenue at least 10%
slug:
type: string
description: url-safe slug for the goal, auto-generated from label if not provided
description:
type: string
description: human-readable description of the goal
startDate:
type: string
format: date
description: start date for this goal
endDate:
type: string
format: date
description: end date for this goal
sensitive:
type: string
description: sensitivity level of goal
enum:
- GLOBAL
- ORG
- SENSITIVE
- PERSONAL
- MANAGER
- HIGH
- PRIVATE
shareAccess:
type: array
description: users who are specifically granted permission to view or edit this goal
items:
$ref: '#/definitions/ShareAccess'
progressUpdateConfig:
description: configuration for automated progress update reminders
$ref: '#/definitions/GoalProgressUpdateConfig'
ShareAccess:
type: object
required:
- access
properties:
access:
type: string
description: access permission level
enum:
- NONE
- LIMITED_READ
- LIMITED_WRITE
- STANDARD_READ
- STANDARD_WRITE
- COMPENSATION_READ
- FULL_READ
- COMP_PLANNING_PARTICIPANT
- COMPENSATION_WRITE
- WRITE
- COMPENSATION_OWNER
- OWNER
userId:
type: string
description: user id
example: 5887a7718f138b6a2a0041a7
groupId:
type: string
description: group id
example: 5887a7718f138b6a2a0041a7
fields:
type: string
description: fields
example: name,image,title
Attribution:
type: object
properties:
principalUserId:
type: string
example: 588f7ee98f138b19220041a7
agentUserIds:
type: array
items:
type: string
example: 588f7ee98f138b19220041a7
eventId:
type: string
example: 588f7ee98f138b19220041a7
aiChatId:
type: string
example: 588f7ee98f138b19220041a7
aiToolUseId:
type: string
channel:
type: string
enum:
- WEB
- MOBILE
- SLACK
- TEAMS
- MCP
GoalProgressSummary:
type: object
properties:
id:
type: string
example: 588f7ee98f138b19220041a7
percent:
type: number
confidence:
type: integer
format: int32
done:
type: integer
format: int32
progressAt:
type: string
at:
type: string
actuals:
type: array
items:
$ref: '#/definitions/GoalTargetActual'
forecasts:
type: array
items:
$ref: '#/definitions/GoalProgressForecast'
targetValues:
type: array
items:
$ref: '#/definitions/GoalTargetWithValue'
comment:
type: string
GoalProgressUpdateConfig:
type: object
required:
- schedule
properties:
schedule:
type: string
description: schedule to send progress reminders, in crontab format
example: 5 4 * * *
messageChannel:
description: the channel to send progress reminders to
$ref: '#/definitions/MessageChannelConfig'
message:
type: string
description: custom message, if any, to include with progress reminders
UpdateGoal:
type: object
properties:
goalTypeId:
type: string
description: goal type
example: 588f7ee98f138b19220041a7
parentGoalId:
type: string
description: parent goal id, for cascading goals
example: 588f7ee98f138b19220041a7
originalGoalId:
type: string
description: original goal id, linking this goal to the goal it was copied from
example: 588f7ee98f138b19220041a7
relatedGoalIds:
type: array
description: list of other goals that are related to this goal
items:
type: string
example: 588f7ee98f138b19220041a7
ownerPersonIds:
type: array
description: list of persons who are responsible for this goal
items:
type: string
example: 588f7ee98f138b19220041a7
supportPersonIds:
type: array
description: list of persons who help support this goal
items:
type: string
example: 588f7ee98f138b19220041a7
groupIds:
type: array
description: list of groups who are responsible for this goal
items:
type: string
example: 588f7ee98f138b19220041a7
label:
type: string
description: human-readable name of the goal
example: Increase Revenue at least 10%
slug:
type: string
description: url-safe slug for the goal, auto-generated from label if not provided
description:
type: string
description: human-readable description of the goal
startDate:
type: string
format: date
description: start date for this goal
endDate:
type: string
format: date
description: end date for this goal
sensitive:
type: string
description: sensitivity level of goal
enum:
- GLOBAL
- ORG
- SENSITIVE
- PERSONAL
- MANAGER
- HIGH
- PRIVATE
shareAccess:
type: array
description: users who are specifically granted permission to view or edit this goal
items:
$ref: '#/definitions/ShareAccess'
progressUpdateConfig:
description: configuration for automated progress update reminders
$ref: '#/definitions/GoalProgressUpdateConfig'