Dovetailapp Transcripts API
The Transcripts API from Dovetailapp — 3 operation(s) for transcripts.
The Transcripts API from Dovetailapp — 3 operation(s) for transcripts.
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/dovetailapp:dovetailapp-transcripts-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:
title: Dovetail Public Transcripts API
version: 0.0.1
description: 'The Dovetail Public API provides programmatic access to your Dovetail workspace.
## Core concepts
- **Projects** — Containers for organizing qualitative research. They hold data, docs, highlights, tags, and insights.
- **Data** — Documents within a project that capture raw research data such as interview transcripts, survey responses, and session recordings. Available via `/v1/data`. The legacy `/v1/notes` endpoints access the same underlying resource.
- **Docs** — Rich-text documents for writing up research reports, sharing findings, and publishing deliverables. Docs replace the deprecated insights resource.
- **Highlights** — Selected passages of text or time ranges in transcripts that have been marked as significant during analysis.
- **Tags** — Labels applied to highlights to categorize findings (e.g. ''Usability Issue'', ''Feature Request'').
- **Channels** — Automated AI-powered pipelines that continuously analyze high-volume customer feedback (app reviews, NPS, support tickets) into structured topics.
- **Contacts** — People in your contacts database such as interview participants or customers.
- **Folders** — Hierarchical containers for organizing projects, docs, channels, and other content.
- **Files** — Attachments (images, documents, audio, video) that can be embedded in docs, data entries, or insights.
## Authentication
All requests require a Bearer token in the `Authorization` header. Generate API tokens from your Dovetail workspace settings.
## Base URL
All API endpoints are served under `https://dovetail.com/api`.'
servers:
- url: https://dovetail.com/api
- url: https://dovetailapp.com/api
security:
- bearerAuth: []
tags:
- name: Transcripts
paths:
/v1/transcripts/{data_id}:
put:
description: 'Create or replace a data entry''s live transcript by fetching a Recall
async transcript JSON from `download_url`, mapping participant names
to speaker labels, and writing the result in a single commit.
Broadcasts the change to connected clients. A transcript with no
usable speech writes a "no speech detected" transcript and returns
200 with `written: 0`, so media can still be attached. Returns 400
if the URL is unsafe, unreachable, or the payload cannot be read.
Returns 409 if the transcript is already wrapped in an audio/video
block (media has been attached).'
summary: Set transcript from download URL
tags:
- Transcripts
parameters:
- name: data_id
in: path
required: true
schema:
type: string
description: Unique identifier of the data entry.
requestBody:
description: Body
content:
application/json:
schema:
type: object
properties:
download_url:
type: string
format: uri
description: HTTPS URL of a Recall async transcript JSON download (media_shortcuts.transcript data.download_url). The server fetches, maps speakers, and replaces the live transcript.
example: https://example.com/transcript.json
join_url:
type: string
maxLength: 2048
format: uri
description: Optional HTTPS meeting join URL from the companion recording client (e.g. Zoom/Meet/Teams window URL). Used server-side to match a cached calendar meeting and link matching attendees to transcript speakers.
example: https://zoom.us/j/123456789
recorded_at:
type: string
description: Optional ISO 8601 wall-clock time of the recording (e.g. when the companion session started). Used with `join_url` to match the correct near-term calendar meeting when the upload is delayed. When omitted, the server uses request arrival time.
example: '2026-08-17T03:00:00.000Z'
video_download_url:
type: string
format: uri
description: Optional HTTPS URL of a Recall mixed MP4 download. Accepted for forward compatibility; the server does not download or attach video from this field yet.
example: https://example.com/video.mp4
required:
- download_url
responses:
'200':
description: '200'
content:
application/json:
schema:
type: object
properties:
data:
type: object
properties:
written:
type: number
description: Total number of words saved across all utterances.
required:
- written
required:
- data
'400':
description: '400'
content:
application/json:
schema:
type: object
properties:
errors:
type: array
items:
oneOf:
- type: object
properties:
code:
type: string
enum:
- InvalidOperation
title:
type: string
message:
type: string
path:
type: string
required:
- code
- title
- type: object
properties:
code:
type: string
enum:
- ValidationError
title:
type: string
enum:
- Contract violation
message:
type: string
path:
type: string
required:
- code
- title
- message
- path
required:
- errors
'401':
description: '401'
content:
application/json:
schema:
type: object
properties:
errors:
type: array
items:
type: object
properties:
code:
type: string
enum:
- Unauthorized
title:
type: string
message:
type: string
required:
- code
- title
required:
- errors
'403':
description: '403'
content:
application/json:
schema:
type: object
properties:
errors:
type: array
items:
oneOf:
- type: object
properties:
code:
type: string
enum:
- Forbidden
title:
type: string
message:
type: string
required:
- code
- title
- type: object
properties:
code:
type: string
enum:
- IpNotAllowlisted
title:
type: string
message:
type: string
decisionId:
type: string
description: Correlation id quoting this enforcement decision — include it when contacting support.
required:
- code
- title
- decisionId
required:
- errors
'404':
description: '404'
content:
application/json:
schema:
type: object
properties:
errors:
type: array
items:
type: object
properties:
code:
type: string
enum:
- NotFound
title:
type: string
message:
type: string
required:
- code
- title
required:
- errors
'409':
description: '409'
content:
application/json:
schema:
type: object
properties:
errors:
type: array
items:
type: object
properties:
code:
type: string
enum:
- InvalidOperation
title:
type: string
message:
type: string
path:
type: string
required:
- code
- title
required:
- errors
'422':
description: '422'
content:
application/json:
schema:
type: object
properties:
errors:
type: array
items:
type: object
properties:
code:
type: string
enum:
- UnprocessableContent
title:
type: string
message:
type: string
required:
- code
- title
- message
required:
- errors
'429':
description: '429'
content:
application/json:
schema:
type: object
properties:
errors:
type: array
items:
type: object
properties:
code:
type: string
enum:
- TooManyRequests
title:
type: string
message:
type: string
required:
- code
- title
required:
- errors
'500':
description: '500'
content:
application/json:
schema:
type: object
properties:
errors:
type: array
items:
type: object
properties:
code:
type: string
enum:
- InternalError
title:
type: string
enum:
- Internal server error
message:
type: string
required:
- code
- title
required:
- errors
operationId: putV1TranscriptsByDataId
x-operation-id-source: derived
/v1/transcripts/{data_id}/audio:
post:
description: 'Attach an already-uploaded audio file to the live transcript on a data
entry. The transcript node currently being written to via
`appendLiveTranscriptUtterance` or `setLiveTranscript` is wrapped in
an audio/video block carrying the supplied `file_id`, giving the
editor audio playback + transcript-sync.
Idempotent for the same `file_id` (returns 200). Returns 409 if the
transcript is already wrapped with a different `file_id`. Returns 404
if the data entry does not exist.'
summary: Attach audio
tags:
- Transcripts
parameters:
- name: data_id
in: path
required: true
schema:
type: string
description: Unique identifier of the data entry.
requestBody:
description: Body
content:
application/json:
schema:
type: object
properties:
file_id:
type: string
description: ID of an already-uploaded audio file to attach.
required:
- file_id
responses:
'200':
description: '200'
content:
application/json:
schema:
type: object
properties:
data:
type: object
properties: {}
required:
- data
'400':
description: '400'
content:
application/json:
schema:
type: object
properties:
errors:
type: array
items:
oneOf:
- type: object
properties:
code:
type: string
enum:
- InvalidOperation
title:
type: string
message:
type: string
path:
type: string
required:
- code
- title
- type: object
properties:
code:
type: string
enum:
- ValidationError
title:
type: string
enum:
- Contract violation
message:
type: string
path:
type: string
required:
- code
- title
- message
- path
required:
- errors
'401':
description: '401'
content:
application/json:
schema:
type: object
properties:
errors:
type: array
items:
type: object
properties:
code:
type: string
enum:
- Unauthorized
title:
type: string
message:
type: string
required:
- code
- title
required:
- errors
'403':
description: '403'
content:
application/json:
schema:
type: object
properties:
errors:
type: array
items:
oneOf:
- type: object
properties:
code:
type: string
enum:
- Forbidden
title:
type: string
message:
type: string
required:
- code
- title
- type: object
properties:
code:
type: string
enum:
- IpNotAllowlisted
title:
type: string
message:
type: string
decisionId:
type: string
description: Correlation id quoting this enforcement decision — include it when contacting support.
required:
- code
- title
- decisionId
required:
- errors
'404':
description: '404'
content:
application/json:
schema:
type: object
properties:
errors:
type: array
items:
type: object
properties:
code:
type: string
enum:
- NotFound
title:
type: string
message:
type: string
required:
- code
- title
required:
- errors
'409':
description: '409'
content:
application/json:
schema:
type: object
properties:
errors:
type: array
items:
type: object
properties:
code:
type: string
enum:
- InvalidOperation
title:
type: string
message:
type: string
path:
type: string
required:
- code
- title
required:
- errors
'422':
description: '422'
content:
application/json:
schema:
type: object
properties:
errors:
type: array
items:
type: object
properties:
code:
type: string
enum:
- UnprocessableContent
title:
type: string
message:
type: string
required:
- code
- title
- message
required:
- errors
'429':
description: '429'
content:
application/json:
schema:
type: object
properties:
errors:
type: array
items:
type: object
properties:
code:
type: string
enum:
- TooManyRequests
title:
type: string
message:
type: string
required:
- code
- title
required:
- errors
'500':
description: '500'
content:
application/json:
schema:
type: object
properties:
errors:
type: array
items:
type: object
properties:
code:
type: string
enum:
- InternalError
title:
type: string
enum:
- Internal server error
message:
type: string
required:
- code
- title
required:
- errors
operationId: postV1TranscriptsByDataIdAudio
x-operation-id-source: derived
/v1/transcripts/{data_id}/utterance:
post:
description: 'Add a finalised utterance to a data entry''s transcript and broadcast it
to connected clients. If the entry has no transcript, one is created
automatically. Send finalised utterances only.'
summary: Add utterance
tags:
- Transcripts
parameters:
- name: data_id
in: path
required: true
schema:
type: string
description: Unique identifier of the data entry.
requestBody:
description: Body
content:
application/json:
schema:
type: object
properties:
speaker_label:
type: string
minLength: 1
maxLength: 36
description: Speaker label for this utterance, such as "A" or "B".
example: A
words:
type: array
items:
type: object
properties:
text:
type: string
minLength: 1
start:
type: number
minimum: 0
description: Word start time, in seconds, relative to the recording's start.
end:
type: number
minimum: 0
description: Word end time, in seconds, relative to the recording's start.
required:
- text
- start
- end
minItems: 1
maxItems: 1000
description: Finalised words in this utterance, in order. Word start/end timestamps are in seconds.
required:
- speaker_label
- words
responses:
'200':
description: '200'
content:
application/json:
schema:
type: object
properties:
data:
type: object
properties:
written:
type: number
description: Number of words saved.
required:
- written
required:
- data
'400':
description: '400'
content:
application/json:
schema:
type: object
properties:
errors:
type: array
items:
oneOf:
- type: object
properties:
code:
type: string
enum:
- InvalidOperation
title:
type: string
message:
type: string
path:
type: string
required:
- code
- title
- type: object
properties:
code:
type: string
enum:
- ValidationError
title:
type: string
enum:
- Contract violation
message:
type: string
path:
type: string
required:
- code
- title
- message
- path
required:
- errors
'401':
description: '401'
content:
application/json:
schema:
type: object
properties:
errors:
type: array
items:
type: object
properties:
code:
type: string
enum:
- Unauthorized
title:
type: string
message:
type: string
required:
- code
- title
required:
- errors
'403':
description: '403'
content:
application/json:
schema:
type: object
properties:
errors:
type: array
items:
oneOf:
- type: object
properties:
code:
type: string
enum:
- Forbidden
title:
type: string
message:
type: string
required:
- code
- title
- type: object
properties:
code:
type: string
enum:
- IpNotAllowlisted
title:
type: string
message:
type: string
decisionId:
type: string
description: Correlation id quoting this enforcement decision — include it when contacting support.
required:
- code
- title
- decisionId
required:
- errors
'404':
description: '404'
content:
application/json:
schema:
type: object
properties:
errors:
type: array
items:
type: object
properties:
code:
type: string
enum:
- NotFound
title:
type: string
message:
type: string
required:
- code
- title
required:
- errors
'422':
description: '422'
content:
application/json:
schema:
type: object
properties:
errors:
type: array
items:
type: object
properties:
code:
type: string
enum:
- UnprocessableContent
title:
type: string
message:
type: string
required:
- code
- title
- message
required:
- errors
'429':
description: '429'
content:
application/json:
schema:
type: object
properties:
errors:
type: array
items:
type: object
properties:
code:
type: string
enum:
- TooManyRequests
title:
type: string
message:
type: string
required:
- code
- title
required:
- errors
'500':
description: '500'
content:
application/json:
schema:
type: object
properties:
errors:
type: array
items:
type: object
properties:
code:
type: string
enum:
- InternalError
title:
type: string
enum:
- Internal server error
message:
type: string
required:
- code
- title
required:
- errors
operationId: postV1TranscriptsByDataIdUtterance
x-operation-id-source: derived
components:
securitySchemes:
bearerAuth:
type: http
scheme: bearer
x-provenance:
method: searched
source: https://developers.dovetail.com/reference
harvested: '2026-10-24'
tool: harvest-readme-openapi.py
note: Assembled verbatim from the OpenAPI definition ReadMe embeds in each operation page of the provider's developer portal; paths and components merged by API title, nothing authored.
assembled_from:
- https://developers.dovetail.com/reference/delete_v1-channels-channel-id.md
- https://developers.dovetail.com/reference/delete_v1-channels-topic-topic-id.md
- https://developers.dovetail.com/reference/delete_v1-contacts-contact-id.md
- https://developers.dovetail.com/reference/delete_v1-data-data-id.md
- https://developers.dovetail.com/reference/delete_v1-docs-doc-id-comments-comment-id.md
# --- truncated at 32 KB (39 KB total) ---
# Full source: https://artifacts.apis.io/dovetailapp/openapi/dovetailapp-transcripts-api-openapi.yml