YouTube title generator API
Describe your video, pick a style, and get five title drafts of 100 characters or less with the main keyword first, or start from the title formula and templates below.
- Endpoint:
POST https://postboost.co/app/api/tools/youtube-title-generator(operationIdgenerateYoutubeTitles) - Web tool: postboost.co/tools/youtube-title-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-titlesonhttps://postboost.co/mcp/tools(listed only with a token)
Request
| Field | Type | Default | Description |
|---|---|---|---|
text | string | What the video is about. | |
style | string: how-to, listicle, question, story, news | "how-to" | how-to ("How to ..."), listicle ("7 ways to ..."), question, story (first person) or news. |
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-title-generator \
-H 'Authorization: Bearer YOUR_API_TOKEN' \
-H 'Content-Type: application/json' \
-d '{"text":"Baking sourdough bread at home for beginners","style":"how-to"}'
from postboost import ApiClient, Configuration
from postboost.api.free_tools_api import FreeToolsApi
from postboost.models import FreeToolGenerateYoutubeTitlesRequest
with ApiClient(Configuration()) as client:
api = FreeToolsApi(client)
result = api.generate_youtube_titles(FreeToolGenerateYoutubeTitlesRequest.from_dict({"text": "Baking sourdough bread at home for beginners", "style": "how-to"}))
print(result.to_dict())
import { FreeToolsApi } from 'postboost';
const api = new FreeToolsApi();
const { body } = await api.generateYoutubeTitles({ text: "Baking sourdough bread at home for beginners", style: "how-to" });
console.log(body);
use PostBoostClient\Api\FreeToolsApi;
use PostBoostClient\Model\FreeToolGenerateYoutubeTitlesRequest;
$api = new FreeToolsApi(new GuzzleHttp\Client());
$result = $api->generateYoutubeTitles(new FreeToolGenerateYoutubeTitlesRequest(['text' => "Baking sourdough bread at home for beginners", 'style' => "how-to"]));
echo $result;
import (
"context"
"encoding/json"
"fmt"
postboost "github.com/postboost-co/postboost-go"
)
var request postboost.FreeToolGenerateYoutubeTitlesRequest
if err := json.Unmarshal([]byte(`{"text":"Baking sourdough bread at home for beginners","style":"how-to"}`), &request); err != nil {
panic(err)
}
client := postboost.NewAPIClient(postboost.NewConfiguration())
result, _, err := client.FreeToolsAPI.GenerateYoutubeTitles(context.Background()).FreeToolGenerateYoutubeTitlesRequest(request).Execute()
fmt.Println(result, err)
require 'postboost'
api = PostBoost::FreeToolsApi.new
result = api.generate_youtube_titles(PostBoost::FreeToolGenerateYoutubeTitlesRequest.new({ text: "Baking sourdough bread at home for beginners", style: "how-to" }))
puts result.to_hash
import com.postboost.ApiClient;
import com.postboost.api.FreeToolsApi;
import com.postboost.model.FreeToolGenerateYoutubeTitlesRequest;
import com.postboost.model.FreeToolGenerateYoutubeTitlesResponse;
FreeToolsApi api = new FreeToolsApi(new ApiClient());
FreeToolGenerateYoutubeTitlesRequest request = FreeToolGenerateYoutubeTitlesRequest.fromJson("{\"text\":\"Baking sourdough bread at home for beginners\",\"style\":\"how-to\"}");
FreeToolGenerateYoutubeTitlesResponse result = api.generateYoutubeTitles(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<FreeToolGenerateYoutubeTitlesRequest>(@"{""text"":""Baking sourdough bread at home for beginners"",""style"":""how-to""}");
var result = await api.GenerateYoutubeTitlesAsync(request);
Console.WriteLine(result.ToJson());
use postboost::apis::configuration::Configuration;
use postboost::apis::free_tools_api;
use postboost::models::FreeToolGenerateYoutubeTitlesRequest;
let config = Configuration::new();
let request: FreeToolGenerateYoutubeTitlesRequest = serde_json::from_str(r##"{"text":"Baking sourdough bread at home for beginners","style":"how-to"}"##)?;
let result = free_tools_api::generate_youtube_titles(&config, request).await?;
println!("{:?}", result);
echo '{"text":"Baking sourdough bread at home for beginners","style":"how-to"}' | ./postboost-cli --content-type application/json generateYoutubeTitles -
This tool needs a token: send Authorization: Bearer YOUR_API_TOKEN as a default header (how, per SDK).
Response
{
"titles": [
"How to Bake Sourdough Bread at Home (Beginner Friendly)",
"How to Make Your First Sourdough Loaf, Step by Step",
"How to Bake Sourdough at Home Without Special Tools",
"Sourdough for Beginners: How to Bake Your First Loaf",
"How to Bake Sourdough Bread: A Simple Guide for Beginners"
],
"credits_spent": 1,
"cached": false
}
With MCP
Connect https://postboost.co/mcp/tools (setup) and ask, for example: Write five YouTube video titles with AI (needs a token, spends AI credits) with the PostBoost generate-youtube-titles 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. |