Charthop scenario API
The scenario API from Charthop — 13 operation(s) for scenario.
The scenario API from Charthop — 13 operation(s) for scenario.
Every API here is available over the APIs.io API and to AI agents over MCP.
One button, every client — Claude, Cursor, VS Code and the rest.
https://apis.io/mcp
find_apisBrowse and filter every API in the catalog.get_api_artifactsOne API's artifacts, grouped by type.get_openapiThe primary OpenAPI for this API.find_similar_apisAPIs that look like this one.apis_io_searchSTART HERE — APIs, providers and tags for one query, each with its total.resolveTurn a domain, URL or GitHub org into the provider it belongs to.find_cohortsEvery scored population of providers in the catalog.curl "https://apis.io/api/v1/apis/charthop-scenario-api"
curl "https://apis.io/api/v1/apis?limit=25"
Discovery needs no key. Ratings and market analysis are Pro.
Free tier, no form to fill in. Signing in shares your email address with us — we store it to create your key and to recognise you if you sign in with another provider. See our Privacy Policy and Terms.
A second provider on the same verified email joins the account you already have.
openapi: 3.2.0
info:
description: REST API for ChartHop
version: V1.0.0
title: ChartHop access Scenario API
contact:
name: ChartHop
url: https://www.charthop.com
email: support@charthop.com
servers:
- url: https://localhost
- url: http://localhost
tags:
- name: scenario
paths:
/v1/org/{orgId}/scenario:
get:
tags:
- scenario
summary: Return all scenarios in the organization paginated
operationId: findScenarios
parameters:
- name: orgId
in: path
description: Org identifier (either id or slug)
required: true
schema:
type: string
- name: from
in: query
description: Scenario id to start paginating from
required: false
schema:
type: string
- name: status
in: query
description: Scenario status to filter by
required: false
schema:
type: string
enum:
- OPEN
- INACTIVE
- MERGED
- DRAFT
- ARCHIVED
- name: limit
in: query
description: Number of results to return
required: false
schema:
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
schema:
type: string
responses:
'200':
description: successful operation
content:
application/json:
schema:
$ref: '#/components/schemas/ResultsScenario'
'400':
description: bad request
'401':
description: not authorized
'404':
description: not found
post:
tags:
- scenario
summary: Create a scenario
operationId: createScenario
parameters:
- name: orgId
in: path
description: Org identifier (either id or slug)
required: true
schema:
type: string
- name: silent
in: query
description: Suppress notification emails
required: false
schema:
type: boolean
- name: skipChangeCreation
in: query
description: Skip over change creation for PROMOTION scenarios
required: false
schema:
type: boolean
responses:
'201':
description: scenario created
content:
application/json:
schema:
$ref: '#/components/schemas/Scenario'
'400':
description: invalid data
'401':
description: not authorized
'403':
description: permission denied
'404':
description: org not found
requestBody:
content:
application/json:
schema:
$ref: '#/components/schemas/CreateScenario'
description: Scenario data to create
required: true
/v1/org/{orgId}/scenario/bulk/archive:
post:
tags:
- scenario
summary: Archive a set of scenarios
operationId: bulkArchiveScenarios
parameters:
- name: orgId
in: path
description: Org identifier (either id or slug)
required: true
schema:
type: string
responses:
'200':
description: successful operation
content:
application/json:
schema:
$ref: '#/components/schemas/Process'
'400':
description: invalid data
'401':
description: not authorized
'403':
description: permission denied
'404':
description: not found
requestBody:
content:
application/json:
schema:
type: array
uniqueItems: true
items:
type: string
example: 588f7ee98f138b19220041a7
description: List of scenario ids to archive
required: true
/v1/org/{orgId}/scenario/bulk/delete:
post:
tags:
- scenario
summary: Delete a set of scenarios
operationId: bulkDeleteScenarios
parameters:
- name: orgId
in: path
description: Org identifier (either id or slug)
required: true
schema:
type: string
responses:
'200':
description: successful operation
content:
application/json:
schema:
$ref: '#/components/schemas/Process'
'400':
description: invalid data
'401':
description: not authorized
'403':
description: permission denied
'404':
description: not found
requestBody:
content:
application/json:
schema:
type: array
uniqueItems: true
items:
type: string
example: 588f7ee98f138b19220041a7
description: List of scenario ids to delete
required: true
/v1/org/{orgId}/scenario/bulk/unarchive:
post:
tags:
- scenario
summary: Unarchive a set of scenarios
operationId: bulkUnarchiveScenarios
parameters:
- name: orgId
in: path
description: Org identifier (either id or slug)
required: true
schema:
type: string
responses:
'200':
description: successful operation
content:
application/json:
schema:
$ref: '#/components/schemas/Process'
'400':
description: invalid data
'401':
description: not authorized
'403':
description: permission denied
'404':
description: not found
requestBody:
content:
application/json:
schema:
type: array
uniqueItems: true
items:
type: string
example: 588f7ee98f138b19220041a7
description: List of scenario ids to unarchive
required: true
/v1/org/{orgId}/scenario/{scenarioId}:
get:
tags:
- scenario
summary: Return a particular scenario by id
operationId: getScenario
parameters:
- name: orgId
in: path
description: Org identifier (either id or slug)
required: true
schema:
type: string
- name: scenarioId
in: path
description: Scenario id
required: true
schema:
type: string
responses:
'200':
description: successful operation
content:
application/json:
schema:
$ref: '#/components/schemas/Scenario'
'400':
description: bad request
'404':
description: not found
patch:
tags:
- scenario
summary: Update an existing scenario
operationId: updateScenario
parameters:
- name: orgId
in: path
description: Org identifier (either id or slug)
required: true
schema:
type: string
- name: scenarioId
in: path
description: Scenario id
required: true
schema:
type: string
- name: silent
in: query
description: Suppress notification emails
required: false
schema:
type: boolean
responses:
'204':
description: scenario updated
'400':
description: invalid data
'401':
description: not authorized
'403':
description: permission denied
'404':
description: not found
requestBody:
content:
application/json:
schema:
$ref: '#/components/schemas/UpdateScenario'
description: Scenario data to update
required: true
delete:
tags:
- scenario
summary: Delete a scenario
operationId: deleteScenario
parameters:
- name: orgId
in: path
description: Org identifier (either id or slug)
required: true
schema:
type: string
- name: scenarioId
in: path
description: Scenario id
required: true
schema:
type: string
responses:
'204':
description: scenario deleted
'400':
description: invalid data
'401':
description: not authorized
'403':
description: permission denied
'404':
description: not found
/v1/org/{orgId}/scenario/{scenarioId}/audit-log:
get:
tags:
- scenario
summary: Return past audit log events for a scenario, paginated
operationId: getScenarioAuditLog
parameters:
- name: orgId
in: path
description: Org identifier (either id or slug)
required: true
schema:
type: string
- name: scenarioId
in: path
description: Scenario id
required: true
schema:
type: string
- name: limit
in: query
description: Number of results to return
required: false
schema:
type: integer
format: int32
- name: from
in: query
description: Timestamp to start search at
required: false
schema:
type: string
- name: format
in: query
description: Data format to use; default is json, can also use json-extended or json-readable
required: false
schema:
type: string
responses:
'200':
description: successful operation
content:
application/json:
schema:
$ref: '#/components/schemas/ResultsEvent'
'400':
description: bad request
'401':
description: not authorized
'404':
description: not found
/v1/org/{orgId}/scenario/{scenarioId}/combine:
post:
tags:
- scenario
summary: Combine multiple scenarios into another scenario
operationId: combineScenarios
parameters:
- name: orgId
in: path
description: Org identifier (either id or slug)
required: true
schema:
type: string
- name: scenarioId
in: path
description: Scenario id to combine the other scenarios into
required: true
schema:
type: string
responses:
'200':
description: successful operation
content:
application/json:
schema:
$ref: '#/components/schemas/Process'
'400':
description: invalid data
'401':
description: not authorized
'403':
description: permission denied
'404':
description: not found
requestBody:
content:
application/json:
schema:
$ref: '#/components/schemas/CombineScenarioRequest'
required: true
/v1/org/{orgId}/scenario/{scenarioId}/dates:
post:
tags:
- scenario
summary: Adjust the dates of the changes in a scenario
operationId: adjustDatesScenario
parameters:
- name: orgId
in: path
description: Org identifier (either id or slug)
required: true
schema:
type: string
- name: scenarioId
in: path
description: Scenario id
required: true
schema:
type: string
responses:
'200':
description: successful operation
content:
application/json:
schema:
$ref: '#/components/schemas/Process'
'400':
description: invalid data
'401':
description: not authorized
'403':
description: permission denied
'404':
description: not found
requestBody:
content:
application/json:
schema:
$ref: '#/components/schemas/AdjustScenarioDateRequest'
required: true
/v1/org/{orgId}/scenario/{scenarioId}/export/audit:
post:
tags:
- scenario
summary: Export a scenario's audit log
operationId: exportScenarioAuditLog
parameters:
- name: orgId
in: path
description: Org identifier (either id or slug)
required: true
schema:
type: string
- name: scenarioId
in: path
description: Scenario id
required: true
schema:
type: string
responses:
'201':
description: successful operation
content:
application/json:
schema:
$ref: '#/components/schemas/Process'
'400':
description: bad request
'403':
description: permission denied
'404':
description: not found
requestBody:
content:
application/json:
schema:
type: object
additionalProperties:
type: object
description: Export options
required: true
/v1/org/{orgId}/scenario/{scenarioId}/merge:
post:
tags:
- scenario
summary: Merge a scenario into the primary timeline
operationId: mergeScenario
parameters:
- name: orgId
in: path
description: Org identifier (either id or slug)
required: true
schema:
type: string
- name: scenarioId
in: path
description: Scenario id to merge
required: true
schema:
type: string
- name: skipErrors
in: query
description: If passed, will skip any changes that fail validation
required: true
schema:
type: boolean
responses:
'200':
description: successful operation
content:
application/json:
schema:
$ref: '#/components/schemas/Process'
'400':
description: invalid data
'401':
description: not authorized
'403':
description: permission denied
'404':
description: not found
/v1/org/{orgId}/scenario/{scenarioId}/recalculate-metadata:
post:
tags:
- scenario
summary: Manually recalculate a scenario's metadata
operationId: recalculateScenarioMetadata
parameters:
- name: orgId
in: path
description: Org identifier (either id or slug)
required: true
schema:
type: string
- name: scenarioId
in: path
description: Scenario id
required: true
schema:
type: string
responses:
'200':
description: successful operation
content:
application/json:
schema:
$ref: '#/components/schemas/ScenarioMetadata'
'400':
description: bad request
'401':
description: not authorized
'404':
description: not found
/v1/org/{orgId}/scenario/{scenarioId}/update-shared-view:
post:
tags:
- scenario
summary: Update a scenario view config
operationId: updateScenarioSharedView
parameters:
- name: orgId
in: path
description: Org identifier (either id or slug)
required: true
schema:
type: string
- name: scenarioId
in: path
description: Scenario id
required: true
schema:
type: string
responses:
'400':
description: invalid data
'401':
description: not authorized
'403':
description: permission denied
'404':
description: not found
requestBody:
content:
application/json:
schema:
$ref: '#/components/schemas/ScenarioSharedViewConfig'
required: true
/v1/org/{orgId}/scenario/{scenarioId}/update-shared-views:
post:
tags:
- scenario
summary: Upsert multiple scenario view configs in a single atomic request
operationId: updateScenarioSharedViews
parameters:
- name: orgId
in: path
description: Org identifier (either id or slug)
required: true
schema:
type: string
- name: scenarioId
in: path
description: Scenario id
required: true
schema:
type: string
responses:
'400':
description: invalid data
'401':
description: not authorized
'403':
description: permission denied
'404':
description: not found
requestBody:
content:
application/json:
schema:
type: array
items:
$ref: '#/components/schemas/ScenarioSharedViewConfig'
description: Shared view configs to upsert, each matched and replaced by type
required: true
components:
schemas:
UpdateScenario:
type: object
properties:
name:
type: string
description: scenario name
example: Q4 Conservative Plan
minItems: 1
maxItems: 80
description:
type: string
description: scenario description
example: Q4 Conservative Plan
minItems: 0
maxItems: 2000
startDate:
type: string
format: date
description: date that this scenario diverges from primary
example: '2017-01-15'
status:
type: string
description: status of scenario
enum:
- OPEN
- INACTIVE
- MERGED
- DRAFT
- ARCHIVED
shareAccess:
type: array
description: users who are specifically granted permission to this scenario
items:
$ref: '#/components/schemas/ShareAccess'
startDateFixed:
type: string
description: whether or not the start date should stay fixed in time, or update to today's date as time passes
enum:
- FIXED
- TODAY
validJobIdSet:
type: array
description: This scenario changes are restricted to the following jobIds
uniqueItems: true
items:
type: string
example: 588f7ee98f138b19220041a7
entityId:
type: string
description: The entity this scenario is associated with
example: 588f7ee98f138b19220041a7
entityType:
type: string
description: The type of entity associated with this scenario
enum:
- COMP_REVIEW
sharedViewConfig:
type: array
description: View configurations associated with this scenario
uniqueItems: true
items:
$ref: '#/components/schemas/ScenarioSharedViewConfig'
budget:
description: Total budget associated with the scenario
$ref: '#/components/schemas/Money'
CreateScenario:
type: object
required:
- name
- startDateFixed
properties:
name:
type: string
description: scenario name
example: Q4 Conservative Plan
minItems: 1
maxItems: 80
description:
type: string
description: scenario description
example: Q4 Conservative Plan
minItems: 0
maxItems: 2000
startDate:
type: string
format: date
description: date that this scenario diverges from primary
example: '2017-01-15'
status:
type: string
description: status of scenario
enum:
- OPEN
- INACTIVE
- MERGED
- DRAFT
- ARCHIVED
shareAccess:
type: array
description: users who are specifically granted permission to this scenario
items:
$ref: '#/components/schemas/ShareAccess'
type:
type: string
description: Type of scenario to be created
enum:
- GENERAL
- COMP
- PROMOTION
- TERMINATE
- CREATE_JOB
- UPDATE_JOB
- BUDGET
- BACKFILL
startDateFixed:
type: string
description: whether or not the start date should stay fixed in time, or update to today's date as time passes
enum:
- FIXED
- TODAY
query:
type: string
description: Query for selecting which people/jobs are initially included in the scenario (only applies to promotion scenarios)
validJobIdSet:
type: array
description: This scenario changes are restricted to the following jobIds
uniqueItems: true
items:
type: string
example: 588f7ee98f138b19220041a7
entityId:
type: string
description: The entity this scenario is associated with
example: 588f7ee98f138b19220041a7
entityType:
type: string
description: The type of entity associated with this scenario
enum:
- COMP_REVIEW
sharedViewConfig:
type: array
description: View configurations associated with this scenario
uniqueItems: true
items:
$ref: '#/components/schemas/ScenarioSharedViewConfig'
budget:
description: Total budget associated with the scenario
$ref: '#/components/schemas/Money'
Money:
type: object
required:
- amount
- currency
properties:
amount:
type: number
currency:
type: string
places:
type: integer
format: int32
ScenarioBudgetImpact:
type: object
required:
- budgetId
- budgetLabel
- primaryUsage
- scenarioUsage
- amount
properties:
budgetId:
type: string
example: 588f7ee98f138b19220041a7
budgetLabel:
type: string
budgetColor:
type: string
primaryUsage:
description: usage in primary absent the scenario's changes
$ref: '#/components/schemas/Money'
scenarioUsage:
description: usage within the scenario
$ref: '#/components/schemas/Money'
amount:
description: total amount available in the budget
$ref: '#/components/schemas/Money'
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
ResultsScenario:
type: object
required:
- data
properties:
data:
type: array
items:
$ref: '#/components/schemas/Scenario'
next:
type: string
access:
type: array
items:
$ref: '#/components/schemas/ResultsAccess'
ResultsAccess:
type: object
required:
- allowed
properties:
ids:
type: array
uniqueItems: true
items:
type: string
example: 588f7ee98f138b19220041a7
allowed:
type: array
uniqueItems: true
items:
$ref: '#/components/schemas/AccessAction'
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: '#/components/schemas/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: '#/components/schemas/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: '#/components/schemas/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
ScenarioMetadata:
type: object
required:
- scenarioId
- access
- canChange
- budgetImpacts
properties:
scenarioId:
type: string
description: scenario id
example: 588f7ee98f138b19220041a7
changeCount:
type: integer
format: int32
description: number of changes contained in scenario
jobCount:
type: integer
format: int32
description: number of job changes contained in scenario
access:
type: array
description: access information on the user for the entity
items:
$ref: '#/components/schemas/ResultsAccess'
canChange:
type: boolean
description: whether user can edit the scenario
cost:
description: summary of cost impact on scenario
$ref: '#/components/schemas/CostImpact'
budgetImpacts:
type: array
description: summary of scenario impact on budgets
items:
$ref: '#/components/schemas/ScenarioBudgetImpact'
changeAt:
type: string
description: most recent time the scenario was changed
example: '2017-01-24T13:57:52Z'
calcEndAt:
type: string
description: most recent summary calculation ended at timestamp
example: '2017-01-24T13:57:52Z'
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
ResultsEvent:
type: object
required:
- data
properties:
data:
type: array
items:
$ref: '#/components/schemas/Event'
next:
type: string
access:
type: array
items:
$ref: '#/components/schemas/ResultsAccess'
Event:
type: object
required:
- id
- userId
- type
- entityType
- entityId
- at
properties:
id:
type: string
description: globally unique id
example: 588f7ee98f138b19220041a7
userId:
type: string
description: user id who caused the event
example: 588f7ee98f138b19220041a7
orgId:
type: string
description: parent organization id
example: 588f7ee98f138b19220041a7
type:
type: string
description: type of event
enum:
- APP
- APPROVE
- CANCEL
- COMBINE
- CREATE
- DELETE
- DONE
- ERROR
- EXPORT
- EXPORT_CSV
- EXPORT_ORG_CHART
- GENERATE
- GEOIP
- INCOMING
- INSTALL
- INVITE
- INBOUND
- LOGIN
- MERGE
- MESSAGE
- OUTBOUND
- PREVIEW_AS
- READ
- READ_EXTERNAL
- READ_SENSITIVE
- READ_ATS
- READ_ATS_WEBHOOK
- READ_FULL_NAME
- READ_FUTURE_DATE
- READ_METADATA
- READ_COMP
- READ_BILLING
- READ_PENDING
- READ_PAYROLL
- READ_SENSITIVE_FILTERS
- WRITE_EXTERNAL
- REASSIGN
- REJECT
- RELEASE
- REMIND
- REMOVE_PASSWORD
- REQUEST
- RESTORE
- RESUME
- REVOKE
- RUN
- RUN_ATS
- SECURITY
- SHARE
- SHOW_DASHBOARD_DAYS_AHEAD
- SHOW_OPEN_JOB
# --- truncated at 32 KB (44 KB total) ---
# Full source: https://raw.githubusercontent.com/api-evangelist/charthop/refs/heads/main/openapi/charthop-scenario-api-openapi.yml