Skip to content

Export Speak AI transcripts and insights to a file

Export a transcript or its insights from Speak AI as PDF, DOCX, TXT, SRT, VTT, CSV, or JSON, one file at a time or several files in one request.

Updated View as MarkdownAsk ClaudeOpen in ChatGPTllms.txt

The Speak AI API exposes 4 exports endpoints under the base URL https://api.speakai.co/v1. Every request needs the x-speakai-key and x-access-token headers described in Authentication.

Export collection enables export of media (audio, video + text) details: transcript, analytics and insights.

What can you do with the exports endpoints?

Speak AI groups these 4 endpoints under the exports resource. Each entry below links to the full reference for that endpoint further down this page.

Export a media file

POST/media/export/{mediaId}/{fileType}

Export one audio or video file from Speak AI as a document, a caption file, or its source file.

Which formats can you export?

Pass the format as the fileType path parameter. Speak AI documents PDF, TXT, DOCX, SRT, VTT, and the source file itself as MP4.

Which formats are unsupported?

Not every format fits every record. You cannot export a text note to .srt, .ttml, or .vtt, and you cannot export an audio or video file to .html.

Which prefix do you use?

The export route is mounted at three prefixes, /media, /text, and /prompt, and all three reach the same handler. The prefix does not change the result. Speak AI reads the record that mediaId belongs to and exports it in the format fileType names, so POST /media/export/{mediaId}/{fileType} and POST /text/export/{mediaId}/{fileType} return the same file for the same id.

Parameters

Parameter In Type Required Description
mediaId path string Yes Id of the record to export.
fileType path string Yes pdf, txt, vtt, srt, docx, ttml, word, html, json, csv, csv-insights, csv-transcript

Request body

Fields marked required are the ones the server rejects the request without. Anything conditional, where a field becomes required only alongside another, is described under Request rules above rather than marked here.

Field Type Description
isSpeakerNames boolean Set to true to print speaker names next to each segment of the transcript.
isSpeakerEmail boolean Set to true to print speaker email addresses next to each segment of the transcript. Null is accepted. The schema declares a default of false, but the validation middleware discards the schema’s converted output, so omitting the property leaves it unset. Every export writer reads it for truthiness, so unset behaves the same as false.
isTimeStamps boolean Set to true to print a timestamp on each segment of the transcript.
isInsightVisualized boolean Set to true to render insights as charts and visuals in the exported file instead of plain text.
isRedacted boolean Set to true to redact sensitive content from the exported file.
redactedCategories string[] List the categories of sensitive content you want redacted when isRedacted is true. the schema with no.items call, so the server does not validate the item type and applies no maximum array length. The server code types the value as string[].
Example request
curl -X POST 'https://api.speakai.co/v1/media/export/a59b93b67685/csv' \
  -H 'x-speakai-key: sk_test_speak_0000000000000000' \
  -H 'x-access-token: eyJhbGciOiJIUzI1NiJ9.test-access-token.0000000000' \
  -H 'Content-Type: application/json' \
  -d '{}'
Response

200 OK

Example response (TXT), text/plain. Arrays are shortened to one entry and long strings are cut.

Speak Transcript - txt
Video Name: How To Find Your First Analyzed Video
Date: Monday, December 14, 2020 12:09 PM

0:00:00
Speaker #1
Hey there, in this video will show you how you can actually access the first 


0:00:03
Speaker #2
video that you've uploaded. So right now we're in the sign in screen. All you have to do hit the sign in button. You're going to be redirected to the dashboard and you can sort of see some of the statistics and everything there, but what you're actually looking to do is hit the button where you can see the little video icon.

Your list is actually going to
...

Example response (SRT), text/plain. Arrays are shortened to one entry and long strings are cut.

1
00:00:00,000 --> 00:00:05,920
Updated

2
00:00:05,920 --> 00:00:08,440
Is this speak AI? Yes it is.

3
00:00:08,440 --> 00:00:13,840
Yeah, I was looking at the company and
notice here that you develop software
right?

4
00:00:13,840 --> 00:00:19,240
Yes, and I wanted to see if your
company's ever applied for the irap
grants.

5
00:00:19,240 --> 00:00:22,480
Yes we have. We have a have a person

6
00:00:22,480 --> 00:00:25,360
that we've sponsored right now and then
we,

7
00:00:25,360 --> 00:00:28,240
you know, I wrap your kickoff projects
here.

8
00:00:28,240 --> 00:00:31,840
So we've got 
...

Response body, application/json.

Field Type
status string
message string

Example response (unsupported format.), application/json.

{
  "status": "failed",
  "message": "Can't export text object to .srt, try .docx or .pdf instead."
}

Example response (JSON), application/json. Arrays are shortened to one entry and long strings are cut.

{
  "mediaId": "875777809d88",
  "name": "How To Customize Your Account & Interactive Media Players Globally",
  "description": "Tyler shows you how to customize your account at the global level for audio and video.",
  "tags": [
    "speak"
  ],
  "duration": "136",
  "createdAt": "2020-08-19T01:34:31.000Z",
  "state": "processed",
  "remark": "",
  "summary": "Hi there, in this video I'm going to show you how you can actually customize your account globally, so that if you're sharing I frames are custom landing pages, whether audio or.",
  "sentiment": {
    "document": {
      "Negative": 2.857142857142857,
      "Neutral": 28.57142857142857,
      "Positive": 68.57142857142857
    },
    "sentences": [
      {
        "id": 1,
        "instances": [
          {
            "adjustedEnd": "0:00:05.85",
            "adjustedStart": "0:00:00",
            "end": "0:00:05.85",
            "start": "0:00:00"
          }
        ],
        "score": {
          "compound": 0,
          "neg": 0,
          "neu": 1,
          "pos": 0
        },
        "text": "Hi there, in this video I'm going to show you how you can actually customize your account globally,"
      }
    ]
  },
  "transcript": [
    {
      "speakerId": 1,
      "text": "Hi there, in this video I'm going to show you how you can actually customize your account globally, so that if you're sharing I frames are custom landing pages, whether audio or vi...",
      "start": "0:00:00",
      "link": "https://app.speakai.co/video/insight/875777809d88?insight=transcript&timeStart=0:00:00"
    }
  ]
}

Example response (CSV), text/csv. Arrays are shortened to one entry and long strings are cut.

MediaId,Media Name,Tags,Duration,Created At,State,Remark,Summary,Overall sentiment,Sentence id,Speaker name,Sentence start time,Sentence end time,Sentence duration,Transcript,Sentiment,Insight category,Insight,Insight starts at,Insight ends at
875777809d88,How To Customize Your Account & Interactive Media Players Globally,speak,136,Tue Aug 18 2020 21:34:31 GMT-0400 (Eastern Daylight Time),processed,,Hi there, in this video I'm going to show you how you can actually customize your account globally,  so that if you're sharing I frames are custom landing pages,  whether audio or video, that the s
...

Multi-export

POST/media/exportMultiple

You can export multiple media at once. We’re going to zip the documents and send it to you as an arraybuffer.

Request rules. No field is conditionally required. Some behaviour depends on what you send rather than on validation, so read the field descriptions below.

Request body

Fields marked required are the ones the server rejects the request without. Anything conditional, where a field becomes required only alongside another, is described under Request rules above rather than marked here.

Field Type Description
mediaIds string[], required List the IDs of the media files you want to export together. Required. the schema with no.items call, so the server does not validate the item type and applies no maximum array length. Pass an empty array to fall back to exporting a whole folder through folderId.
fileType string Choose the file format used for every file in the export. Must be one of the accepted values. There is no default, and the schema does not mark it required, but the controller dereferences it unconditionally, so omitting it returns a 500 rather than a validation error. Treat it as required in practice. One of: csv, csv-insights, csv-transcript, csv-transcript-sentiment, csv-text-sentiment, docx, html, json, md, pdf, sourceFile, srt, ttml, txt, vtt, mp4.
isSpeakerNames boolean Set to true to print speaker names next to each segment of the transcript.
isSpeakerEmail boolean Set to true to print speaker email addresses next to each segment of the transcript. Null is accepted. The schema declares a default of false, but the validation middleware discards the schema’s converted output, so omitting the property leaves it unset. Unset behaves the same as false.
isTimeStamps boolean Set to true to print a timestamp on each segment of the transcript.
isInsightVisualized boolean Set to true to render insights as charts and visuals in the exported files instead of plain text.
isRedacted boolean Set to true to redact sensitive content from the exported files.
redactedCategories string[] List the categories of sensitive content you want redacted when isRedacted is true. the schema with no.items call, so the server does not validate the item type and applies no maximum array length. The server code types the value as string[].
folderId string Give the ID of a folder to export every media file inside it. The server uses this only when mediaIds is empty. An empty string is explicitly allowed. The schema declares a default of empty string, but the validation middleware discards the schema’s converted output, so an omitted folderId reaches the controller as undefined rather than as an empty string.
isMerged boolean Set to true to combine every media file into one document instead of one file per media inside the ZIP. The schema declares a default of false, but that default is not written back to the request, so omitting it leaves it unset. Unset behaves the same as false.
Example request
curl -X POST 'https://api.speakai.co/v1/media/exportMultiple' \
  -H 'x-speakai-key: sk_test_speak_0000000000000000' \
  -H 'x-access-token: eyJhbGciOiJIUzI1NiJ9.test-access-token.0000000000' \
  -H 'Content-Type: application/json' \
  -d '{
  "mediaIds": [
    "a59b93b67685",
    "dsd33b676asd"
  ],
  "fileType": "pdf",
  "isSpeakerNames": true,
  "isTimeStamps": true,
  "isInsightVisualized": true,
  "isRedacted": true,
  "isMerged": false
}'
Response

200 Success

The spec records this status code with no example body.

Export through the prompt prefix

POST/prompt/export/{mediaId}/{fileType}

Export one record from Speak AI through the /prompt prefix. The response is the same as the /media prefix returns for the same id.

Which formats can you export?

Pass the format as the fileType path parameter. Speak AI documents PDF, TXT, DOCX, SRT, VTT, and the source file itself as MP4.

Which formats are unsupported?

Not every format fits every record. You cannot export a text note to .srt, .ttml, or .vtt, and you cannot export an audio or video file to .html.

Which prefix do you use?

The export route is mounted at three prefixes, /media, /text, and /prompt, and all three reach the same handler. The prefix does not change the result. Speak AI reads the record that mediaId belongs to and exports it in the format fileType names, so POST /media/export/{mediaId}/{fileType} and POST /text/export/{mediaId}/{fileType} return the same file for the same id.

Parameters

Parameter In Type Required Description
mediaId path string Yes Id of the record to export.
fileType path string Yes pdf, txt, vtt, srt, docx, ttml, word, html, json, csv, csv-insights, csv-transcript

Request body

Fields marked required are the ones the server rejects the request without. Anything conditional, where a field becomes required only alongside another, is described under Request rules above rather than marked here.

Field Type Description
isSpeakerNames boolean Set to true to print speaker names next to each segment of the transcript.
isSpeakerEmail boolean Set to true to print speaker email addresses next to each segment of the transcript. Null is accepted. The schema declares a default of false, but the validation middleware discards the schema’s converted output, so omitting the property leaves it unset. Unset behaves the same as false.
isTimeStamps boolean Set to true to print a timestamp on each segment of the transcript.
isInsightVisualized boolean Set to true to render insights as charts and visuals in the exported file instead of plain text.
isRedacted boolean Set to true to redact sensitive content from the exported file.
redactedCategories string[] List the categories of sensitive content you want redacted when isRedacted is true. the schema with no.items call, so the server does not validate the item type and applies no maximum array length. The server code types the value as string[].
Example request
curl -X POST 'https://api.speakai.co/v1/prompt/export/a59b93b67685/csv' \
  -H 'x-speakai-key: sk_test_speak_0000000000000000' \
  -H 'x-access-token: eyJhbGciOiJIUzI1NiJ9.test-access-token.0000000000' \
  -H 'Content-Type: application/json' \
  -d '{}'
Response

200 OK

Response body, application/json.

Field Type
status string
message string

Example response (Unsupported format), application/json.

{
  "status": "failed",
  "message": "Can't export text object to .srt, try .docx or .pdf instead."
}

Export a text note

POST/text/export/{mediaId}/{fileType}

Export one text note from Speak AI as a document. The response is the same as the /media prefix returns for the same id.

Which formats can you export?

Pass the format as the fileType path parameter. Speak AI documents PDF, TXT, DOCX, SRT, VTT, and the source file itself as MP4.

Which formats are unsupported?

Not every format fits every record. You cannot export a text note to .srt, .ttml, or .vtt, and you cannot export an audio or video file to .html.

Which prefix do you use?

The export route is mounted at three prefixes, /media, /text, and /prompt, and all three reach the same handler. The prefix does not change the result. Speak AI reads the record that mediaId belongs to and exports it in the format fileType names, so POST /media/export/{mediaId}/{fileType} and POST /text/export/{mediaId}/{fileType} return the same file for the same id.

Parameters

Parameter In Type Required Description
mediaId path string Yes Id of the record to export.
fileType path string Yes pdf, txt, vtt, srt, docx, ttml, word, html, json, csv, csv-insights, csv-transcript

Request body

Fields marked required are the ones the server rejects the request without. Anything conditional, where a field becomes required only alongside another, is described under Request rules above rather than marked here.

Field Type Description
isSpeakerNames boolean Set to true to print speaker names next to each segment of the transcript.
isSpeakerEmail boolean Set to true to print speaker email addresses next to each segment of the transcript. Null is accepted. The schema declares a default of false, but the validation middleware discards the schema’s converted output, so omitting the property leaves it unset. Unset behaves the same as false.
isTimeStamps boolean Set to true to print a timestamp on each segment of the transcript.
isInsightVisualized boolean Set to true to render insights as charts and visuals in the exported file instead of plain text.
isRedacted boolean Set to true to redact sensitive content from the exported file.
redactedCategories string[] List the categories of sensitive content you want redacted when isRedacted is true. the schema with no.items call, so the server does not validate the item type and applies no maximum array length. The server code types the value as string[].
Example request
curl -X POST 'https://api.speakai.co/v1/text/export/a59b93b67685/csv' \
  -H 'x-speakai-key: sk_test_speak_0000000000000000' \
  -H 'x-access-token: eyJhbGciOiJIUzI1NiJ9.test-access-token.0000000000' \
  -H 'Content-Type: application/json' \
  -d '{}'
Response

200 OK

Response body, application/json.

Field Type
status string
message string

Example response (Unsupported format), application/json.

{
  "status": "failed",
  "message": "Can't export text object to .srt, try .docx or .pdf instead."
}

Get an API key on the Speak AI developer page.

Navigation

Type to search…

↑↓ navigate↵ selectEsc close