swagger: '2.0' info: description: REST API for ChartHop version: V1.0.0 title: ChartHop access transcript 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: transcript paths: /v1/org/{orgId}/transcript: get: tags: - transcript summary: Return transcripts in the organization operationId: findTranscripts consumes: - application/json produces: - application/json parameters: - name: orgId in: path description: Org identifier (either id or slug) required: true type: string - name: from in: query description: Only include transcripts starting at or after this timestamp (inclusive) required: false type: string - name: until in: query description: Only include transcripts starting before this timestamp (exclusive) required: false type: string - name: fromId in: query description: Transcript 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: returnAccess in: query description: Return access information required: false type: string responses: '200': description: successful operation schema: $ref: '#/definitions/ResultsTranscript' '400': description: bad request '401': description: not authorized '404': description: not found post: tags: - transcript summary: Create a transcript operationId: createTranscript 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: Transcript data to create required: true schema: $ref: '#/definitions/CreateTranscript' responses: '201': description: transcript created schema: $ref: '#/definitions/Transcript' '400': description: invalid data '401': description: not authorized '403': description: permission denied /v1/org/{orgId}/transcript/import: post: tags: - transcript summary: Import transcripts from a JSONL file operationId: importTranscripts consumes: - multipart/form-data produces: - application/json parameters: - name: orgId in: path description: Org identifier (either id or slug) required: true type: string - name: file in: formData description: JSONL file containing transcript data required: true type: file responses: '200': description: import process started schema: $ref: '#/definitions/Process' '400': description: invalid data '401': description: not authorized '403': description: permission denied /v1/org/{orgId}/transcript/import/filepath: post: tags: - transcript summary: Import transcripts from a JSONL file already stored (by process file path) operationId: importTranscriptsWithFilePath consumes: - application/json produces: - application/json parameters: - name: orgId in: path description: Org identifier (either id or slug) required: true type: string - name: filePath in: query description: path to the JSONL file in storage required: true type: string - name: parentProcessId in: query description: process id of the parent process required: false type: string responses: '200': description: import process started schema: $ref: '#/definitions/Process' '400': description: invalid data '401': description: not authorized '403': description: permission denied /v1/org/{orgId}/transcript/{transcriptId}: get: tags: - transcript summary: Return a particular transcript by id operationId: getTranscript consumes: - application/json produces: - application/json parameters: - name: orgId in: path description: Org identifier (either id or slug) required: true type: string - name: transcriptId in: path description: Transcript id required: true type: string responses: '200': description: successful operation schema: $ref: '#/definitions/Transcript' '400': description: bad request '404': description: not found patch: tags: - transcript summary: Update a transcript operationId: updateTranscript consumes: - application/json produces: - application/json parameters: - name: orgId in: path description: Org identifier (either id or slug) required: true type: string - name: transcriptId in: path description: Transcript id required: true type: string - name: body in: body description: Transcript data to update required: true schema: $ref: '#/definitions/UpdateTranscript' responses: '204': description: transcript updated '400': description: invalid data '401': description: not authorized '403': description: permission denied '404': description: not found delete: tags: - transcript summary: Delete a transcript operationId: deleteTranscript consumes: - application/json produces: - application/json parameters: - name: orgId in: path description: Org identifier (either id or slug) required: true type: string - name: transcriptId in: path description: Transcript id required: true type: string responses: '204': description: transcript deleted '401': description: not authorized '403': description: permission denied '404': description: not found /v1/org/{orgId}/transcript/{transcriptId}/content: get: tags: - transcript summary: Return the transcript's content as speaker-attributed lines operationId: getTranscriptContent consumes: - application/json produces: - application/json parameters: - name: orgId in: path description: Org identifier (either id or slug) required: true type: string - name: transcriptId in: path description: Transcript id required: true type: string responses: '200': description: successful operation schema: $ref: '#/definitions/ResultsTranscriptContentLine' '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 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 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' ResultsTranscript: type: object required: - data properties: data: type: array items: $ref: '#/definitions/Transcript' next: type: string access: type: array items: $ref: '#/definitions/ResultsAccess' Transcript: type: object required: - id - orgId - externalId - recordingSystem - startAt - untilAt - attendees - label - hasTranscriptContent - sensitive properties: id: type: string description: globally unique id example: 665f3aabe88164e4ef6c3a22 orgId: type: string description: parent organization id example: 665f3ad1e47a82bf1d3d180b calendarEntryId: type: string description: optional calendar entry ID example: 588f7ee98f138b19220041a7 externalCalendarEntryId: type: string description: optional external calendar event id from the recording system (e.g. the Google Calendar event id) externalId: type: string description: external ID of the recording externalUrl: type: string description: URL to view/watch the recording on the external system example: https://app.gong.io/call?id=7815638069569786872 recordingSystem: type: string description: system type used to record example: gong startAt: type: string description: timestamp of the start time (inclusive) example: '2017-01-24T13:57:52Z' untilAt: type: string description: timestamp of the ending time (exclusive) example: '2017-01-24T14:57:52Z' attendees: type: array description: list of attendees items: $ref: '#/definitions/TranscriptAttendee' tags: type: array description: tags on the transcript, such as customer name items: type: string language: type: string description: ISO 639-1 (two-letter) language code of the meeting example: en minItems: 0 maxItems: 10 label: type: string description: meeting title minItems: 0 maxItems: 500 description: type: string description: very short description of the meeting discussion (1-3 sentences) minItems: 0 maxItems: 2000 summary: type: string description: detailed summary of the meeting discussion (a few paragraphs) minItems: 0 maxItems: 20000 hasTranscriptContent: type: boolean description: whether transcript content (the JSONL utterance file) has been stored for this transcript; the content's storage location is derived from the transcript id, so no path is stored sensitive: type: string description: sensitivity level of the transcript enum: - GLOBAL - ORG - SENSITIVE - PERSONAL - MANAGER - HIGH - PRIVATE shareAccess: type: array description: list of users and groups who have the transcript shared with them items: $ref: '#/definitions/ShareAccess' createId: type: string description: created by user id example: 588f7ee98f138b19220041a7 createBehalfId: type: string description: created on behalf of 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 updateBehalfId: type: string description: last updated on behalf of 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 deleteBehalfId: type: string description: deleted on behalf of user id example: 588f7ee98f138b19220041a7 deleteAt: type: string description: deleted timestamp example: '2017-01-24T13:57:52Z' 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 CreateTranscript: type: object required: - externalId - recordingSystem - startAt - untilAt - attendees - label - sensitive properties: calendarEntryId: type: string description: optional calendar entry ID example: 588f7ee98f138b19220041a7 externalCalendarEntryId: type: string description: optional external calendar event id from the recording system (e.g. the Google Calendar event id) externalId: type: string description: external ID of the recording externalUrl: type: string description: URL to view/watch the recording on the external system example: https://app.gong.io/call?id=7815638069569786872 recordingSystem: type: string description: system type used to record example: gong startAt: type: string description: timestamp of the start time (inclusive) example: '2017-01-24T13:57:52Z' untilAt: type: string description: timestamp of the ending time (exclusive) example: '2017-01-24T14:57:52Z' attendees: type: array description: list of attendees items: $ref: '#/definitions/TranscriptAttendee' tags: type: array description: tags on the transcript, such as customer name items: type: string language: type: string description: ISO 639-1 (two-letter) language code of the meeting example: en minItems: 0 maxItems: 10 label: type: string description: meeting title minItems: 0 maxItems: 500 description: type: string description: very short description of the meeting discussion (1-3 sentences) minItems: 0 maxItems: 2000 summary: type: string description: detailed summary of the meeting discussion (a few paragraphs) minItems: 0 maxItems: 20000 sensitive: type: string description: sensitivity level of the transcript enum: - GLOBAL - ORG - SENSITIVE - PERSONAL - MANAGER - HIGH - PRIVATE shareAccess: type: array description: list of users and groups who have the transcript shared with them items: $ref: '#/definitions/ShareAccess' 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 ResultsTranscriptContentLine: type: object required: - data properties: data: type: array items: $ref: '#/definitions/TranscriptContentLine' next: type: string access: type: array items: $ref: '#/definitions/ResultsAccess' UpdateTranscript: type: object properties: calendarEntryId: type: string description: optional calendar entry ID example: 588f7ee98f138b19220041a7 externalCalendarEntryId: type: string description: optional external calendar event id from the recording system (e.g. the Google Calendar event id) externalId: type: string description: external ID of the recording externalUrl: type: string description: URL to view/watch the recording on the external system example: https://app.gong.io/call?id=7815638069569786872 recordingSystem: type: string description: system type used to record example: gong startAt: type: string description: timestamp of the start time (inclusive) example: '2017-01-24T13:57:52Z' untilAt: type: string description: timestamp of the ending time (exclusive) example: '2017-01-24T14:57:52Z' attendees: type: array description: list of attendees items: $ref: '#/definitions/TranscriptAttendee' tags: type: array description: tags on the transcript, such as customer name items: type: string language: type: string description: ISO 639-1 (two-letter) language code of the meeting example: en minItems: 0 maxItems: 10 label: type: string description: meeting title minItems: 0 maxItems: 500 description: type: string description: very short description of the meeting discussion (1-3 sentences) minItems: 0 maxItems: 2000 summary: type: string description: detailed summary of the meeting discussion (a few paragraphs) minItems: 0 maxItems: 20000 sensitive: type: string description: sensitivity level of the transcript enum: - GLOBAL - ORG - SENSITIVE - PERSONAL - MANAGER - HIGH - PRIVATE shareAccess: type: array description: list of users and groups who have the transcript shared with them items: $ref: '#/definitions/ShareAccess' TranscriptAttendee: type: object required: - id properties: id: type: string description: unique speaker identifier for the transcript (equals personId if available) personId: type: string description: ChartHop person ID, if in the system example: 588f7ee98f138b19220041a7 email: type: string description: email address, if available name: type: string description: display name, if available title: type: string description: job title, if available orgId: type: string description: ChartHop org ID, if available example: 588f7ee98f138b19220041a7 orgName: type: string description: name of the person's organization, if available TranscriptContentLine: type: object required: - text properties: speakerId: type: string description: speaker's attendee id (matches a TranscriptAttendee.id), if known startAt: type: string description: when this line was spoken example: '2017-01-24T13:57:52Z' endAt: type: string description: when this line ended example: '2017-01-24T13:57:55Z' text: type: string description: the spoken text