Charthop table API
The table API from Charthop — 10 operation(s) for table.
The table API from Charthop — 10 operation(s) for table.
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-table-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 Table API
contact:
name: ChartHop
url: https://www.charthop.com
email: support@charthop.com
servers:
- url: https://localhost
- url: http://localhost
tags:
- name: table
paths:
/v1/org/{orgId}/table:
get:
tags:
- table
summary: Return all tables in the organization paginated
operationId: findTables
parameters:
- name: orgId
in: path
description: Org identifier (either id or slug)
required: true
schema:
type: string
- name: from
in: query
description: Table id to start paginating from
required: false
schema:
type: string
- name: limit
in: query
description: Number of results to return
required: false
schema:
type: integer
format: int32
- name: includeBuiltIns
in: query
description: Whether to include built-in tables
required: false
schema:
type: boolean
- name: names
in: query
description: Table names to filter to
required: false
schema:
type: string
responses:
'200':
description: successful operation
content:
application/json:
schema:
$ref: '#/components/schemas/ResultsTable'
'400':
description: bad request
'401':
description: not authorized
'404':
description: not found
post:
tags:
- table
summary: Create a table
operationId: createTable
parameters:
- name: orgId
in: path
description: Org identifier (either id or slug)
required: true
schema:
type: string
responses:
'201':
description: table created
content:
application/json:
schema:
$ref: '#/components/schemas/Table'
'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/CreateTable'
description: Table data to create
required: true
/v1/org/{orgId}/table/{tableId}:
get:
tags:
- table
summary: Return a particular table by id or name
operationId: getTable
parameters:
- name: orgId
in: path
description: Org identifier (either id or slug)
required: true
schema:
type: string
- name: tableId
in: path
description: Table id or name
required: true
schema:
type: string
responses:
'200':
description: successful operation
content:
application/json:
schema:
$ref: '#/components/schemas/Table'
'400':
description: bad request
'404':
description: not found
patch:
tags:
- table
summary: Update an existing table
operationId: updateTable
parameters:
- name: orgId
in: path
description: Org identifier (either id or slug)
required: true
schema:
type: string
- name: tableId
in: path
description: Table id or name
required: true
schema:
type: string
responses:
'204':
description: table 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/UpdateTable'
description: Table data to update
required: true
delete:
tags:
- table
summary: Delete a table
operationId: deleteTable
parameters:
- name: orgId
in: path
description: Org identifier (either id or slug)
required: true
schema:
type: string
- name: tableId
in: path
description: Table id or name
required: true
schema:
type: string
responses:
'204':
description: table deleted
'400':
description: invalid data
'401':
description: not authorized
'403':
description: permission denied
'404':
description: not found
/v1/org/{orgId}/table/{tableId}/data:
get:
tags:
- table
summary: Retrieve all rows from the table
operationId: findRows
parameters:
- name: orgId
in: path
description: Org identifier (either id or slug)
required: true
schema:
type: string
- name: tableId
in: path
description: Table id or unique name to retrieve
required: true
schema:
type: string
- name: date
in: query
description: Date to search as of
required: false
schema:
type: string
format: date
- name: scenarioId
in: query
description: Scenario id to retrieve from
required: false
schema:
type: string
- name: q
in: query
description: Filter to query by
required: false
schema:
type: string
- name: from
in: query
description: Job id to start paginating from
required: false
schema:
type: string
- name: limit
in: query
description: Number of results to return
required: false
schema:
type: integer
format: int32
- name: sort
in: query
description: Sort by fields, comma-separated. For descending sort, prepend a -
required: false
schema:
type: string
- name: columns
in: query
description: Columns to retrieve, comma-separated (defaults to all columns)
required: false
schema:
type: string
- name: format
in: query
description: Data format to use; default is json, can also use json-extended, json-readable, or csv
required: false
schema:
type: string
- name: splitColumns
in: query
description: Whether to split complex columns, used for tabular data formats
required: false
schema:
type: boolean
- 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 retrieval
content:
application/json:
schema:
$ref: '#/components/schemas/ResultsData'
'400':
description: bad request
'401':
description: not authorized
'404':
description: not found
post:
tags:
- table
summary: Upsert row data
operationId: upsertRow
parameters:
- name: orgId
in: path
description: Org identifier (either id or slug)
required: true
schema:
type: string
- name: tableId
in: path
description: Table id or unique name to update
required: true
schema:
type: string
- name: date
in: query
description: Date to update as of
required: false
schema:
type: string
format: date
- name: scenarioId
in: query
description: Scenario id to update
required: false
schema:
type: string
responses:
'204':
description: no content
'400':
description: bad request
'401':
description: not authorized
'404':
description: not found
requestBody:
content:
application/json:
schema:
type: object
additionalProperties:
type: object
required: true
/v1/org/{orgId}/table/{tableId}/data/{keyColumn}/{keyValue}:
get:
tags:
- table
summary: Retrieve a particular row
operationId: getRow
parameters:
- name: orgId
in: path
description: Org identifier (either id or slug)
required: true
schema:
type: string
- name: tableId
in: path
description: Table id or unique name to retrieve
required: true
schema:
type: string
- name: keyColumn
in: path
description: 'Column name to look up the row by (for example: id)'
required: true
schema:
type: string
- name: keyValue
in: path
description: Value of the column
required: true
schema:
type: string
- name: date
in: query
description: Date to search as of
required: false
schema:
type: string
format: date
- name: scenarioId
in: query
description: Scenario id to retrieve from
required: false
schema:
type: string
- name: columns
in: query
description: Columns to retrieve, comma-separated (defaults to all columns)
required: false
schema:
type: string
- name: format
in: query
description: Data format to use; default is json, can also use json-extended, json-readable, or csv
required: false
schema:
type: string
responses:
'200':
description: successful retrieval
content:
application/json:
schema:
$ref: '#/components/schemas/ResultsData'
'400':
description: bad request
'401':
description: not authorized
'404':
description: not found
patch:
tags:
- table
summary: Update an existing row
operationId: updateRow
parameters:
- name: orgId
in: path
description: Org identifier (either id or slug)
required: true
schema:
type: string
- name: tableId
in: path
description: Table id or unique name to update
required: true
schema:
type: string
- name: keyColumn
in: path
description: 'Column name to look up the row by (for example: id)'
required: true
schema:
type: string
- name: keyValue
in: path
description: Value of the key column
required: true
schema:
type: string
- name: date
in: query
description: Date to update as of
required: false
schema:
type: string
format: date
- name: scenarioId
in: query
description: Scenario id to update
required: false
schema:
type: string
responses:
'204':
description: no content
'400':
description: bad request
'401':
description: not authorized
'404':
description: not found
requestBody:
content:
application/json:
schema:
type: object
additionalProperties:
type: object
required: true
delete:
tags:
- table
summary: Delete an existing row
operationId: deleteRow
parameters:
- name: orgId
in: path
description: Org identifier (either id or slug)
required: true
schema:
type: string
- name: tableId
in: path
description: Table id or unique name to update
required: true
schema:
type: string
- name: keyColumn
in: path
description: 'Column name to look up the row by (for example: id)'
required: true
schema:
type: string
- name: keyValue
in: path
description: Value of the key column
required: true
schema:
type: string
- name: date
in: query
description: Date to delete as of
required: false
schema:
type: string
format: date
- name: scenarioId
in: query
description: Scenario id to delete from
required: false
schema:
type: string
responses:
'204':
description: no content
'400':
description: bad request
'401':
description: not authorized
'404':
description: not found
/v1/org/{orgId}/table/{tableId}/data/{keyColumn}/{keyValue}/history:
get:
tags:
- table
summary: Retrieve the history of a particular row
operationId: findRowHistory
parameters:
- name: orgId
in: path
description: Org identifier (either id or slug)
required: true
schema:
type: string
- name: tableId
in: path
description: Table id or unique name to retrieve
required: true
schema:
type: string
- name: keyColumn
in: path
description: 'Column name to look up the row by (for example: id)'
required: true
schema:
type: string
- name: keyValue
in: path
description: Value of the column
required: true
schema:
type: string
- name: startDate
in: query
description: Start date to retrieve from, inclusive
required: false
schema:
type: string
format: date
- name: endDate
in: query
description: End date to retrieve through, inclusive
required: false
schema:
type: string
format: date
- name: scenarioId
in: query
description: Scenario id to retrieve from
required: false
schema:
type: string
- name: columns
in: query
description: Columns to retrieve, comma-separated (defaults to all columns)
required: false
schema:
type: string
- name: from
in: query
description: History id to start paginating from
required: false
schema:
type: string
- name: limit
in: query
description: Number of results to return
required: false
schema:
type: integer
format: int32
- name: format
in: query
description: Data format to use; default is json, can also use json-extended, json-readable, or csv
required: false
schema:
type: string
- 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 retrieval
content:
application/json:
schema:
$ref: '#/components/schemas/ResultsData'
'400':
description: bad request
'401':
description: not authorized
'404':
description: not found
/v1/org/{orgId}/table/{tableId}/data/{keyColumn}/{keyValue}/purge:
delete:
tags:
- table
summary: Delete an existing row, purging from history entirely
operationId: purgeRowFromHistory
parameters:
- name: orgId
in: path
description: Org identifier (either id or slug)
required: true
schema:
type: string
- name: tableId
in: path
description: Table id or unique name to update
required: true
schema:
type: string
- name: keyColumn
in: path
description: 'Column name to look up the row by (for example: id)'
required: true
schema:
type: string
- name: keyValue
in: path
description: Value of the key column
required: true
schema:
type: string
- name: date
in: query
description: Date to look up as of
required: false
schema:
type: string
format: date
responses:
'204':
description: no content
'400':
description: bad request
'401':
description: not authorized
'404':
description: not found
/v1/org/{orgId}/table/{tableId}/export:
post:
tags:
- table
summary: Export table data to CSV file
operationId: exportCsv
parameters:
- name: orgId
in: path
description: Org identifier (either id or slug)
required: true
schema:
type: string
- name: tableId
in: path
description: Table id or unique name to update
required: true
schema:
type: string
responses:
'202':
description: export started
content:
application/json:
schema:
$ref: '#/components/schemas/Process'
'400':
description: invalid manifest data
'401':
description: not authorized
'403':
description: permission denied
requestBody:
content:
application/json:
schema:
type: object
additionalProperties:
type: object
description: export options
required: true
/v1/org/{orgId}/table/{tableId}/import:
post:
tags:
- table
summary: Import data from CSV file
operationId: importCsv
parameters:
- name: orgId
in: path
description: Org identifier (either id or slug)
required: true
schema:
type: string
- name: tableId
in: path
description: Table id or unique name to update
required: true
schema:
type: string
- name: date
in: query
description: Date to update as of
required: false
schema:
type: string
format: date
- name: skipErrors
in: query
description: Whether to skip erroneous rows, or reject the entire upload if any are invalid (default)
required: true
schema:
type: boolean
- name: importFromProcessId
in: query
description: Import a file from another process, instead of directly uploading it
required: false
schema:
type: string
- name: parentProcessId
in: query
description: Parent process id to attach to
required: false
schema:
type: string
responses:
'200':
description: import started
content:
application/json:
schema:
$ref: '#/components/schemas/Process'
'400':
description: invalid manifest data
'401':
description: not authorized
'403':
description: permission denied
requestBody:
content:
multipart/form-data:
schema:
type: object
properties:
file:
type: string
format: binary
/v1/org/{orgId}/table/{tableId}/import/download-template:
get:
tags:
- table
summary: Download a CSV template for a table import
operationId: downloadImportCsvTemplate
parameters:
- name: orgId
in: path
description: Org identifier (either id or slug)
required: true
schema:
type: string
- name: tableId
in: path
description: Table id or unique name to update
required: true
schema:
type: string
responses:
'200':
description: ok
content:
text/csv:
schema:
type: object
'400':
description: invalid manifest data
'401':
description: not authorized
'403':
description: permission denied
/v1/org/{orgId}/table/{tableId}/reorder:
post:
tags:
- table
summary: Reorder the default order that columns in a table will appear
operationId: reorderTableColumns
parameters:
- name: orgId
in: path
description: Org identifier (either id or slug)
required: true
schema:
type: string
- name: tableId
in: path
description: Table id or name
required: true
schema:
type: string
responses:
'204':
description: no content
'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/ReorderColumns'
description: Columns to reorder
required: true
components:
schemas:
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
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
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'
CreateTable:
type: object
required:
- name
- effectiveDated
properties:
name:
type: string
description: name of table
example: budget-data
label:
type: string
description: human readable label for the table
example: Budget Data
effectiveDated:
type: boolean
description: whether or not the table is time tracked with effective dates (allows time travel or not). If false, then the values set in the table will be the same across all dates.
sensitive:
type: string
description: base sensitivity of this table and entities in it -- should be either ORG or HIGH
enum:
- GLOBAL
- ORG
- SENSITIVE
- PERSONAL
- MANAGER
- HIGH
- PRIVATE
shareAccess:
type: array
description: users who are specifically granted permission to this table
items:
$ref: '#/components/schemas/ShareAccess'
ResultsTable:
type: object
required:
- data
properties:
data:
type: array
items:
$ref: '#/components/schemas/Table'
next:
type: string
access:
type: array
items:
$ref: '#/components/schemas/ResultsAccess'
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
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
Table:
type: object
required:
- id
- name
- label
- effectiveDated
- sensitive
- shareAccess
- rowCount
properties:
id:
type: string
description: globally unique id
example: 588f7ee98f138b19220041a7
orgId:
type: string
description: parent org id
example: 588f7ee98f138b19220041a7
name:
type: string
description: name of table
example: budget-data
label:
type: string
description: human readable label for the table
example: Budget Data
labelColumnId:
type: string
description: if set, use this column id as the label when referencing rows
example: 588f7ee98f138b19220041a7
effectiveDated:
type: boolean
description: whether or not the table is time tracked with effective dates (allows time travel or not). If false, then the values set in the table will be the same across all dates.
sensitive:
type: string
description: base sensitivity of this table and entities in it -- should be either ORG or HIGH
enum:
- GLOBAL
- ORG
- SENSITIVE
- PERSONAL
- MANAGER
- HIGH
- PRIVATE
shareAccess:
type: array
description: users who are specifically granted permission to this table
items:
$ref: '#/components/schemas/ShareAccess'
rowCount:
type: integer
format: int64
description: number of rows in the table
createId:
type: string
description: created by user id
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'
deleteId:
type: string
description: deleted by user id
example: 588f7ee98f138b19220041a7
deleteBehalfId:
type: string
description: deleted on behalf of user id
example: 588f7ee98f138b19220041a7
deleteAttribution:
$ref: '#/components/schemas/Attribution'
deleteAt:
type: string
description: deleted timestamp
example: '2017-01-24T13:57:52Z'
ReorderColumns:
type: object
required:
- columns
properties:
columns:
type: array
items:
type: string
UpdateTable:
type: object
properties:
name:
type: string
description: name of table
example: budget-data
label:
type: string
description: human readable label for the table
example: Budget Data
labelColumnId:
type: string
description: if set, use this column id as the label when referencing rows
example: 588f7ee98f138b19220041a7
effectiveDated:
type: boolean
description: whether or not the table is time tracked with effective dates (allows time travel or not). If false, then the values set in the table will be the same across all dates.
sensitive:
type: string
description: base sensitivity of this table and entities in it -- should be either ORG or HIGH
enum:
- GLOBAL
- ORG
- SENSITIVE
- PERSONAL
- MANAGER
- HIGH
- PRIVATE
shareAccess:
type: array
description: users who are specifically granted permission to this table
items:
$ref: '#/components/schemas/ShareAccess'
ResultsData:
type: object
required:
- data
properties:
data:
type: array
items:
type: object
additionalProperties:
type: object
next:
type: string
access:
type: array
items:
$ref: '#/components/schemas/ResultsAccess'
totalRow:
type: object
additionalProperties:
type: object
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:
# --- truncated at 32 KB (33 KB total) ---
# Full source: https://raw.githubusercontent.com/api-evangelist/charthop/refs/heads/main/openapi/charthop-table-api-openapi.yml