Generate slide transcripts
curl --request POST \
--url https://slides-api.getalai.com/api/v1/presentations/{presentation_id}/transcripts \
--header 'Authorization: Bearer <token>' \
--header 'Content-Type: application/json' \
--data '
{
"slide_ids": [
"<string>"
]
}
'import requests
url = "https://slides-api.getalai.com/api/v1/presentations/{presentation_id}/transcripts"
payload = { "slide_ids": ["<string>"] }
headers = {
"Authorization": "Bearer <token>",
"Content-Type": "application/json"
}
response = requests.post(url, json=payload, headers=headers)
print(response.text)const options = {
method: 'POST',
headers: {Authorization: 'Bearer <token>', 'Content-Type': 'application/json'},
body: JSON.stringify({slide_ids: ['<string>']})
};
fetch('https://slides-api.getalai.com/api/v1/presentations/{presentation_id}/transcripts', options)
.then(res => res.json())
.then(res => console.log(res))
.catch(err => console.error(err));<?php
$curl = curl_init();
curl_setopt_array($curl, [
CURLOPT_URL => "https://slides-api.getalai.com/api/v1/presentations/{presentation_id}/transcripts",
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => "",
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 30,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => "POST",
CURLOPT_POSTFIELDS => json_encode([
'slide_ids' => [
'<string>'
]
]),
CURLOPT_HTTPHEADER => [
"Authorization: Bearer <token>",
"Content-Type: application/json"
],
]);
$response = curl_exec($curl);
$err = curl_error($curl);
curl_close($curl);
if ($err) {
echo "cURL Error #:" . $err;
} else {
echo $response;
}package main
import (
"fmt"
"strings"
"net/http"
"io"
)
func main() {
url := "https://slides-api.getalai.com/api/v1/presentations/{presentation_id}/transcripts"
payload := strings.NewReader("{\n \"slide_ids\": [\n \"<string>\"\n ]\n}")
req, _ := http.NewRequest("POST", url, payload)
req.Header.Add("Authorization", "Bearer <token>")
req.Header.Add("Content-Type", "application/json")
res, _ := http.DefaultClient.Do(req)
defer res.Body.Close()
body, _ := io.ReadAll(res.Body)
fmt.Println(string(body))
}HttpResponse<String> response = Unirest.post("https://slides-api.getalai.com/api/v1/presentations/{presentation_id}/transcripts")
.header("Authorization", "Bearer <token>")
.header("Content-Type", "application/json")
.body("{\n \"slide_ids\": [\n \"<string>\"\n ]\n}")
.asString();require 'uri'
require 'net/http'
url = URI("https://slides-api.getalai.com/api/v1/presentations/{presentation_id}/transcripts")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Post.new(url)
request["Authorization"] = 'Bearer <token>'
request["Content-Type"] = 'application/json'
request.body = "{\n \"slide_ids\": [\n \"<string>\"\n ]\n}"
response = http.request(request)
puts response.read_body{
"generation_id": "<string>"
}{
"detail": [
{
"loc": [
"<string>"
],
"msg": "<string>",
"type": "<string>"
}
]
}Presentations
Extract Transcripts
Extract slide content and layout information using AI. This is an async operation.
Returns a structured description of each slide’s text content and layout. You can process all slides or specify particular slide IDs.
POST
/
api
/
v1
/
presentations
/
{presentation_id}
/
transcripts
Generate slide transcripts
curl --request POST \
--url https://slides-api.getalai.com/api/v1/presentations/{presentation_id}/transcripts \
--header 'Authorization: Bearer <token>' \
--header 'Content-Type: application/json' \
--data '
{
"slide_ids": [
"<string>"
]
}
'import requests
url = "https://slides-api.getalai.com/api/v1/presentations/{presentation_id}/transcripts"
payload = { "slide_ids": ["<string>"] }
headers = {
"Authorization": "Bearer <token>",
"Content-Type": "application/json"
}
response = requests.post(url, json=payload, headers=headers)
print(response.text)const options = {
method: 'POST',
headers: {Authorization: 'Bearer <token>', 'Content-Type': 'application/json'},
body: JSON.stringify({slide_ids: ['<string>']})
};
fetch('https://slides-api.getalai.com/api/v1/presentations/{presentation_id}/transcripts', options)
.then(res => res.json())
.then(res => console.log(res))
.catch(err => console.error(err));<?php
$curl = curl_init();
curl_setopt_array($curl, [
CURLOPT_URL => "https://slides-api.getalai.com/api/v1/presentations/{presentation_id}/transcripts",
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => "",
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 30,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => "POST",
CURLOPT_POSTFIELDS => json_encode([
'slide_ids' => [
'<string>'
]
]),
CURLOPT_HTTPHEADER => [
"Authorization: Bearer <token>",
"Content-Type: application/json"
],
]);
$response = curl_exec($curl);
$err = curl_error($curl);
curl_close($curl);
if ($err) {
echo "cURL Error #:" . $err;
} else {
echo $response;
}package main
import (
"fmt"
"strings"
"net/http"
"io"
)
func main() {
url := "https://slides-api.getalai.com/api/v1/presentations/{presentation_id}/transcripts"
payload := strings.NewReader("{\n \"slide_ids\": [\n \"<string>\"\n ]\n}")
req, _ := http.NewRequest("POST", url, payload)
req.Header.Add("Authorization", "Bearer <token>")
req.Header.Add("Content-Type", "application/json")
res, _ := http.DefaultClient.Do(req)
defer res.Body.Close()
body, _ := io.ReadAll(res.Body)
fmt.Println(string(body))
}HttpResponse<String> response = Unirest.post("https://slides-api.getalai.com/api/v1/presentations/{presentation_id}/transcripts")
.header("Authorization", "Bearer <token>")
.header("Content-Type", "application/json")
.body("{\n \"slide_ids\": [\n \"<string>\"\n ]\n}")
.asString();require 'uri'
require 'net/http'
url = URI("https://slides-api.getalai.com/api/v1/presentations/{presentation_id}/transcripts")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Post.new(url)
request["Authorization"] = 'Bearer <token>'
request["Content-Type"] = 'application/json'
request.body = "{\n \"slide_ids\": [\n \"<string>\"\n ]\n}"
response = http.request(request)
puts response.read_body{
"generation_id": "<string>"
}{
"detail": [
{
"loc": [
"<string>"
],
"msg": "<string>",
"type": "<string>"
}
]
}Extract structured content and layout information from slides. This is an async operation.
Poll
Path Parameters
| Parameter | Type | Description |
|---|---|---|
presentation_id | string | ID of the presentation |
Request Body
| Parameter | Type | Default | Description |
|---|---|---|---|
slide_ids | array | (all slides) | Specific slide IDs to extract transcripts for. If omitted, extracts for all slides. |
Response
{
"generation_id": "abc123-def456-..."
}
GET /generations/{generation_id} until status is completed.
Example
All Slides
curl -X POST "https://slides-api.getalai.com/api/v1/presentations/xyz789-.../transcripts" \
-H "Authorization: Bearer YOUR_API_KEY" \
-H "Content-Type: application/json" \
-d '{}'
Specific Slides
curl -X POST "https://slides-api.getalai.com/api/v1/presentations/xyz789-.../transcripts" \
-H "Authorization: Bearer YOUR_API_KEY" \
-H "Content-Type: application/json" \
-d '{
"slide_ids": ["slide1-...", "slide2-..."]
}'
Status Response
{
"generation_id": "abc123-...",
"generation_type": "transcript_generation",
"status": "completed",
"presentation_id": "xyz789-...",
"transcripts": [
{
"slide_id": "slide1-...",
"slide_order": 0,
"title": "Q4 Sales Report",
"content": "Quarterly Performance Overview\n\nRevenue: $1.2M\nGrowth: +25% YoY",
"layout": "TITLE_SLIDE"
},
{
"slide_id": "slide2-...",
"slide_order": 1,
"title": "Key Metrics",
"content": "• New customers: 150\n• Retention rate: 94%\n• NPS score: 72",
"layout": "CONTENT_SLIDE"
}
]
}
Transcript generation uses credits. The cost is based on the number of slides processed.
Authorizations
Your Alai API key. Get one from your account settings at app.getalai.com
Path Parameters
Body
application/json
Specific slides to generate transcripts for. If omitted, generates for all slides.
Response
Successful Response
Unique identifier to poll for generation status via GET /generations/{generation_id}
Was this page helpful?
⌘I