Start Pekto smart presentation generation
curl --request POST \
--url https://fwpvfpysaskvlxgwcaxk.supabase.co/functions/v1/api-v1/presentation-plans \
--header 'Authorization: Bearer <token>' \
--header 'Content-Type: application/json' \
--data '
{
"topic": "<string>",
"content": "<string>",
"instructions": "<string>",
"slide_count": 15,
"language": "English",
"aspect_ratio": "16:9",
"include_stock_images": false,
"use_web_search": false
}
'import requests
url = "https://fwpvfpysaskvlxgwcaxk.supabase.co/functions/v1/api-v1/presentation-plans"
payload = {
"topic": "<string>",
"content": "<string>",
"instructions": "<string>",
"slide_count": 15,
"language": "English",
"aspect_ratio": "16:9",
"include_stock_images": False,
"use_web_search": False
}
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({
topic: '<string>',
content: '<string>',
instructions: '<string>',
slide_count: 15,
language: 'English',
aspect_ratio: '16:9',
include_stock_images: false,
use_web_search: false
})
};
fetch('https://fwpvfpysaskvlxgwcaxk.supabase.co/functions/v1/api-v1/presentation-plans', 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://fwpvfpysaskvlxgwcaxk.supabase.co/functions/v1/api-v1/presentation-plans",
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([
'topic' => '<string>',
'content' => '<string>',
'instructions' => '<string>',
'slide_count' => 15,
'language' => 'English',
'aspect_ratio' => '16:9',
'include_stock_images' => false,
'use_web_search' => false
]),
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://fwpvfpysaskvlxgwcaxk.supabase.co/functions/v1/api-v1/presentation-plans"
payload := strings.NewReader("{\n \"topic\": \"<string>\",\n \"content\": \"<string>\",\n \"instructions\": \"<string>\",\n \"slide_count\": 15,\n \"language\": \"English\",\n \"aspect_ratio\": \"16:9\",\n \"include_stock_images\": false,\n \"use_web_search\": false\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://fwpvfpysaskvlxgwcaxk.supabase.co/functions/v1/api-v1/presentation-plans")
.header("Authorization", "Bearer <token>")
.header("Content-Type", "application/json")
.body("{\n \"topic\": \"<string>\",\n \"content\": \"<string>\",\n \"instructions\": \"<string>\",\n \"slide_count\": 15,\n \"language\": \"English\",\n \"aspect_ratio\": \"16:9\",\n \"include_stock_images\": false,\n \"use_web_search\": false\n}")
.asString();require 'uri'
require 'net/http'
url = URI("https://fwpvfpysaskvlxgwcaxk.supabase.co/functions/v1/api-v1/presentation-plans")
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 \"topic\": \"<string>\",\n \"content\": \"<string>\",\n \"instructions\": \"<string>\",\n \"slide_count\": 15,\n \"language\": \"English\",\n \"aspect_ratio\": \"16:9\",\n \"include_stock_images\": false,\n \"use_web_search\": false\n}"
response = http.request(request)
puts response.read_bodyAPI Reference
Start Pekto smart presentation generation
Create a secure generation request and return a Pekto URL. Opening that URL runs Pekto’s native outline, smart-template selection, content fitting, theme, and editable-project flow. Clients must not synthesize slide layouts themselves.
POST
/
presentation-plans
Start Pekto smart presentation generation
curl --request POST \
--url https://fwpvfpysaskvlxgwcaxk.supabase.co/functions/v1/api-v1/presentation-plans \
--header 'Authorization: Bearer <token>' \
--header 'Content-Type: application/json' \
--data '
{
"topic": "<string>",
"content": "<string>",
"instructions": "<string>",
"slide_count": 15,
"language": "English",
"aspect_ratio": "16:9",
"include_stock_images": false,
"use_web_search": false
}
'import requests
url = "https://fwpvfpysaskvlxgwcaxk.supabase.co/functions/v1/api-v1/presentation-plans"
payload = {
"topic": "<string>",
"content": "<string>",
"instructions": "<string>",
"slide_count": 15,
"language": "English",
"aspect_ratio": "16:9",
"include_stock_images": False,
"use_web_search": False
}
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({
topic: '<string>',
content: '<string>',
instructions: '<string>',
slide_count: 15,
language: 'English',
aspect_ratio: '16:9',
include_stock_images: false,
use_web_search: false
})
};
fetch('https://fwpvfpysaskvlxgwcaxk.supabase.co/functions/v1/api-v1/presentation-plans', 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://fwpvfpysaskvlxgwcaxk.supabase.co/functions/v1/api-v1/presentation-plans",
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([
'topic' => '<string>',
'content' => '<string>',
'instructions' => '<string>',
'slide_count' => 15,
'language' => 'English',
'aspect_ratio' => '16:9',
'include_stock_images' => false,
'use_web_search' => false
]),
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://fwpvfpysaskvlxgwcaxk.supabase.co/functions/v1/api-v1/presentation-plans"
payload := strings.NewReader("{\n \"topic\": \"<string>\",\n \"content\": \"<string>\",\n \"instructions\": \"<string>\",\n \"slide_count\": 15,\n \"language\": \"English\",\n \"aspect_ratio\": \"16:9\",\n \"include_stock_images\": false,\n \"use_web_search\": false\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://fwpvfpysaskvlxgwcaxk.supabase.co/functions/v1/api-v1/presentation-plans")
.header("Authorization", "Bearer <token>")
.header("Content-Type", "application/json")
.body("{\n \"topic\": \"<string>\",\n \"content\": \"<string>\",\n \"instructions\": \"<string>\",\n \"slide_count\": 15,\n \"language\": \"English\",\n \"aspect_ratio\": \"16:9\",\n \"include_stock_images\": false,\n \"use_web_search\": false\n}")
.asString();require 'uri'
require 'net/http'
url = URI("https://fwpvfpysaskvlxgwcaxk.supabase.co/functions/v1/api-v1/presentation-plans")
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 \"topic\": \"<string>\",\n \"content\": \"<string>\",\n \"instructions\": \"<string>\",\n \"slide_count\": 15,\n \"language\": \"English\",\n \"aspect_ratio\": \"16:9\",\n \"include_stock_images\": false,\n \"use_web_search\": false\n}"
response = http.request(request)
puts response.read_bodyAuthorizations
Pekto API key (pekto_live_...), an OAuth 2.1 access token from Pekto sign-in (used by MCP clients), or a Pekto user session token.
Body
application/json
Topic or title for the presentation
Source text, meeting notes, or article content to convert into slides
Custom design or tone instructions for the slides
Number of slides to generate
Required range:
1 <= x <= 30Target language for the presentation
Available options:
16:9, 4:5, 1:1, 9:16, 4:3 Response
201
Created generation request. The job result contains generation_url for the user to open in Pekto.

