YouTube description generator API
Describe your video and get three description drafts under YouTube's limit, with the hook first and your own chapter times, or fill in the template below.
- Endpoint:
POST https://postboost.co/app/api/tools/youtube-description-generator(operationIdgenerateYoutubeDescription) - Web tool: postboost.co/tools/youtube-description-generator
- Token: required. A new generation spends 1 AI credit of the workspace you name (or your active workspace); a repeated identical request is answered from the cache for free. A scoped API key needs the
aiability and pays with its own workspace - MCP: tool
generate-youtube-descriptiononhttps://postboost.co/mcp/tools(listed only with a token)
Request
| Field | Type | Default | Description |
|---|---|---|---|
text | string | What the video is about: a summary or the main points. | |
keywords | string | Optional search keywords to use naturally, comma separated. | |
chapters | boolean | false | Add a chapters block after the first paragraph. |
chapter_lines | array of string | Your chapters as m:ss Title lines, the first at 0:00. Used verbatim when chapters is true; without them the block has fill-in placeholders. Timestamps are never generated. | |
cta | string: subscribe, link, none | "subscribe" | The closing call to action: subscribe, link (a [link] placeholder) or none. |
workspace | string | UUID of the workspace whose AI credits pay for the call. Default: your active workspace (a scoped API key: its own workspace). |
Call it
- curl
- Python
- Node.js
- PHP
- Go
- Ruby
- Java
- C#
- Rust
- CLI
curl -X POST https://postboost.co/app/api/tools/youtube-description-generator \
-H 'Authorization: Bearer YOUR_API_TOKEN' \
-H 'Content-Type: application/json' \
-d '{"text":"A beginner sourdough bread recipe: feeding the starter, mixing, shaping and baking in a Dutch oven.","keywords":"sourdough bread, beginner","chapters":true,"chapter_lines":["0:00 Intro","1:30 Feeding the starter","4:10 Shaping","9:45 Baking"],"cta":"subscribe"}'
from postboost import ApiClient, Configuration
from postboost.api.free_tools_api import FreeToolsApi
from postboost.models import FreeToolGenerateYoutubeDescriptionRequest
with ApiClient(Configuration()) as client:
api = FreeToolsApi(client)
result = api.generate_youtube_description(FreeToolGenerateYoutubeDescriptionRequest.from_dict({"text": "A beginner sourdough bread recipe: feeding the starter, mixing, shaping and baking in a Dutch oven.", "keywords": "sourdough bread, beginner", "chapters": True, "chapter_lines": ["0:00 Intro", "1:30 Feeding the starter", "4:10 Shaping", "9:45 Baking"], "cta": "subscribe"}))
print(result.to_dict())
import { FreeToolsApi } from 'postboost';
const api = new FreeToolsApi();
const { body } = await api.generateYoutubeDescription({ text: "A beginner sourdough bread recipe: feeding the starter, mixing, shaping and baking in a Dutch oven.", keywords: "sourdough bread, beginner", chapters: true, chapterLines: ["0:00 Intro", "1:30 Feeding the starter", "4:10 Shaping", "9:45 Baking"], cta: "subscribe" });
console.log(body);
use PostBoostClient\Api\FreeToolsApi;
use PostBoostClient\Model\FreeToolGenerateYoutubeDescriptionRequest;
$api = new FreeToolsApi(new GuzzleHttp\Client());
$result = $api->generateYoutubeDescription(new FreeToolGenerateYoutubeDescriptionRequest(['text' => "A beginner sourdough bread recipe: feeding the starter, mixing, shaping and baking in a Dutch oven.", 'keywords' => "sourdough bread, beginner", 'chapters' => true, 'chapter_lines' => ["0:00 Intro", "1:30 Feeding the starter", "4:10 Shaping", "9:45 Baking"], 'cta' => "subscribe"]));
echo $result;
import (
"context"
"encoding/json"
"fmt"
postboost "github.com/postboost-co/postboost-go"
)
var request postboost.FreeToolGenerateYoutubeDescriptionRequest
if err := json.Unmarshal([]byte(`{"text":"A beginner sourdough bread recipe: feeding the starter, mixing, shaping and baking in a Dutch oven.","keywords":"sourdough bread, beginner","chapters":true,"chapter_lines":["0:00 Intro","1:30 Feeding the starter","4:10 Shaping","9:45 Baking"],"cta":"subscribe"}`), &request); err != nil {
panic(err)
}
client := postboost.NewAPIClient(postboost.NewConfiguration())
result, _, err := client.FreeToolsAPI.GenerateYoutubeDescription(context.Background()).FreeToolGenerateYoutubeDescriptionRequest(request).Execute()
fmt.Println(result, err)
require 'postboost'
api = PostBoost::FreeToolsApi.new
result = api.generate_youtube_description(PostBoost::FreeToolGenerateYoutubeDescriptionRequest.new({ text: "A beginner sourdough bread recipe: feeding the starter, mixing, shaping and baking in a Dutch oven.", keywords: "sourdough bread, beginner", chapters: true, chapter_lines: ["0:00 Intro", "1:30 Feeding the starter", "4:10 Shaping", "9:45 Baking"], cta: "subscribe" }))
puts result.to_hash
import com.postboost.ApiClient;
import com.postboost.api.FreeToolsApi;
import com.postboost.model.FreeToolGenerateYoutubeDescriptionRequest;
import com.postboost.model.FreeToolGenerateYoutubeDescriptionResponse;
FreeToolsApi api = new FreeToolsApi(new ApiClient());
FreeToolGenerateYoutubeDescriptionRequest request = FreeToolGenerateYoutubeDescriptionRequest.fromJson("{\"text\":\"A beginner sourdough bread recipe: feeding the starter, mixing, shaping and baking in a Dutch oven.\",\"keywords\":\"sourdough bread, beginner\",\"chapters\":true,\"chapter_lines\":[\"0:00 Intro\",\"1:30 Feeding the starter\",\"4:10 Shaping\",\"9:45 Baking\"],\"cta\":\"subscribe\"}");
FreeToolGenerateYoutubeDescriptionResponse result = api.generateYoutubeDescription(request);
System.out.println(result.toJson());
using Newtonsoft.Json;
using PostBoost.Client.Api;
using PostBoost.Client.Client;
using PostBoost.Client.Model;
var api = new FreeToolsApi(new Configuration());
var request = JsonConvert.DeserializeObject<FreeToolGenerateYoutubeDescriptionRequest>(@"{""text"":""A beginner sourdough bread recipe: feeding the starter, mixing, shaping and baking in a Dutch oven."",""keywords"":""sourdough bread, beginner"",""chapters"":true,""chapter_lines"":[""0:00 Intro"",""1:30 Feeding the starter"",""4:10 Shaping"",""9:45 Baking""],""cta"":""subscribe""}");
var result = await api.GenerateYoutubeDescriptionAsync(request);
Console.WriteLine(result.ToJson());
use postboost::apis::configuration::Configuration;
use postboost::apis::free_tools_api;
use postboost::models::FreeToolGenerateYoutubeDescriptionRequest;
let config = Configuration::new();
let request: FreeToolGenerateYoutubeDescriptionRequest = serde_json::from_str(r##"{"text":"A beginner sourdough bread recipe: feeding the starter, mixing, shaping and baking in a Dutch oven.","keywords":"sourdough bread, beginner","chapters":true,"chapter_lines":["0:00 Intro","1:30 Feeding the starter","4:10 Shaping","9:45 Baking"],"cta":"subscribe"}"##)?;
let result = free_tools_api::generate_youtube_description(&config, request).await?;
println!("{:?}", result);
echo '{"text":"A beginner sourdough bread recipe: feeding the starter, mixing, shaping and baking in a Dutch oven.","keywords":"sourdough bread, beginner","chapters":true,"chapter_lines":["0:00 Intro","1:30 Feeding the starter","4:10 Shaping","9:45 Baking"],"cta":"subscribe"}' | ./postboost-cli --content-type application/json generateYoutubeDescription -
This tool needs a token: send Authorization: Bearer YOUR_API_TOKEN as a default header (how, per SDK).
Response
{
"descriptions": [
"Bake your first sourdough bread at home with this beginner recipe, from starter to crust.\n\nChapters\n0:00 Intro\n1:30 Feeding the starter\n4:10 Shaping\n9:45 Baking\n\nWe feed the starter, mix a simple dough, shape it and bake it in a Dutch oven. The full recipe is at [link].\n\nSubscribe for more bread recipes.\n#sourdough #baking",
"New to sourdough bread? This video takes you through one loaf, step by step.\n\nChapters\n0:00 Intro\n1:30 Feeding the starter\n4:10 Shaping\n9:45 Baking\n\nYou only need flour, water, salt and an active starter. Recipe and timings: [link].\n\nSubscribe so you don't miss the next bake.\n#sourdoughbread"
],
"credits_spent": 1,
"cached": false
}
With MCP
Connect https://postboost.co/mcp/tools (setup) and ask, for example: Write three YouTube video descriptions with AI (needs a token, spends AI credits) with the PostBoost generate-youtube-description tool.
Errors
| Status | When |
|---|---|
401 | No token, or an invalid one. The body has register_url to create a free account. |
403 | workspace is not a workspace you belong to, or your account has no workspace, or a scoped API key lacks the ai ability or is bound to another workspace (code: insufficient_scope). |
413 | The JSON body is larger than 128 KB. |
422 | A field is invalid; the body lists the errors per field. |
429 | The workspace has no AI credits left this billing cycle (code: ai_credits_exhausted, upgrade_url), or the per-minute limit is reached. |
502 | The AI provider failed or timed out. No credit was spent. |
503 | AI tools are switched off right now. |