curl --request GET \
--url https://api.pickfu.com/v1/playbooks/{slug} \
--header 'Authorization: Bearer <token>'import requests
url = "https://api.pickfu.com/v1/playbooks/{slug}"
headers = {"Authorization": "Bearer <token>"}
response = requests.get(url, headers=headers)
print(response.text)const options = {method: 'GET', headers: {Authorization: 'Bearer <token>'}};
fetch('https://api.pickfu.com/v1/playbooks/{slug}', 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://api.pickfu.com/v1/playbooks/{slug}",
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => "",
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 30,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => "GET",
CURLOPT_HTTPHEADER => [
"Authorization: Bearer <token>"
],
]);
$response = curl_exec($curl);
$err = curl_error($curl);
curl_close($curl);
if ($err) {
echo "cURL Error #:" . $err;
} else {
echo $response;
}package main
import (
"fmt"
"net/http"
"io"
)
func main() {
url := "https://api.pickfu.com/v1/playbooks/{slug}"
req, _ := http.NewRequest("GET", url, nil)
req.Header.Add("Authorization", "Bearer <token>")
res, _ := http.DefaultClient.Do(req)
defer res.Body.Close()
body, _ := io.ReadAll(res.Body)
fmt.Println(string(body))
}HttpResponse<String> response = Unirest.get("https://api.pickfu.com/v1/playbooks/{slug}")
.header("Authorization", "Bearer <token>")
.asString();require 'uri'
require 'net/http'
url = URI("https://api.pickfu.com/v1/playbooks/{slug}")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Get.new(url)
request["Authorization"] = 'Bearer <token>'
response = http.request(request)
puts response.read_body{
"slug": "<string>",
"name": "<string>",
"description": "<string>",
"industry": "<string>",
"poll_count": 123,
"duration": "<string>",
"icon": "<string>",
"icon_lucide": "<string>",
"url": "<string>",
"goal": "<string>",
"steps_markdown": "<string>",
"project_name_template": "<string>"
}{
"message": "<string>"
}{
"message": "<string>"
}Get playbook
Retrieves a playbook by its slug. Returns the full structured playbook including goal, step-by-step instructions with poll creation URLs, and metadata. The steps_markdown field contains formatted instructions with embedded poll creation links.
curl --request GET \
--url https://api.pickfu.com/v1/playbooks/{slug} \
--header 'Authorization: Bearer <token>'import requests
url = "https://api.pickfu.com/v1/playbooks/{slug}"
headers = {"Authorization": "Bearer <token>"}
response = requests.get(url, headers=headers)
print(response.text)const options = {method: 'GET', headers: {Authorization: 'Bearer <token>'}};
fetch('https://api.pickfu.com/v1/playbooks/{slug}', 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://api.pickfu.com/v1/playbooks/{slug}",
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => "",
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 30,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => "GET",
CURLOPT_HTTPHEADER => [
"Authorization: Bearer <token>"
],
]);
$response = curl_exec($curl);
$err = curl_error($curl);
curl_close($curl);
if ($err) {
echo "cURL Error #:" . $err;
} else {
echo $response;
}package main
import (
"fmt"
"net/http"
"io"
)
func main() {
url := "https://api.pickfu.com/v1/playbooks/{slug}"
req, _ := http.NewRequest("GET", url, nil)
req.Header.Add("Authorization", "Bearer <token>")
res, _ := http.DefaultClient.Do(req)
defer res.Body.Close()
body, _ := io.ReadAll(res.Body)
fmt.Println(string(body))
}HttpResponse<String> response = Unirest.get("https://api.pickfu.com/v1/playbooks/{slug}")
.header("Authorization", "Bearer <token>")
.asString();require 'uri'
require 'net/http'
url = URI("https://api.pickfu.com/v1/playbooks/{slug}")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Get.new(url)
request["Authorization"] = 'Bearer <token>'
response = http.request(request)
puts response.read_body{
"slug": "<string>",
"name": "<string>",
"description": "<string>",
"industry": "<string>",
"poll_count": 123,
"duration": "<string>",
"icon": "<string>",
"icon_lucide": "<string>",
"url": "<string>",
"goal": "<string>",
"steps_markdown": "<string>",
"project_name_template": "<string>"
}{
"message": "<string>"
}{
"message": "<string>"
}Authorizations
OAuth2 access token obtained via the authorization flow. Include in the Authorization header as: Bearer {access_token}
Path Parameters
Playbook slug (GUID)
Response
Default Response
Unique playbook identifier (GUID)
Playbook name
Short description of the playbook
Industry category
Number of surveys in this playbook
Estimated completion time (e.g. "2-3 days")
Icon identifier or emoji
Lucide icon name for the UI
Direct URL to view this playbook on PickFu. Always null — no /playbooks/ route exists
The research goal this playbook helps achieve
Formatted instructions with embedded survey creation links
Template for the project name when starting this playbook
Was this page helpful?
