Hashtag group builder API
Paste hashtags or plain keywords in any shape. The builder adds the missing #, cuts tags at punctuation, drops duplicates and number-only tags, checks how many hashtags the network allows and splits the list into groups you can copy in one click.
- Endpoint:
POST https://postboost.co/app/api/tools/hashtag-group-builder(operationIdbuildHashtagGroups) - Web tool: postboost.co/tools/hashtag-group-builder
- Token: optional (limits)
- MCP: tool
build-hashtag-groupsonhttps://postboost.co/mcp/tools
Request
| Field | Type | Default | Description |
|---|---|---|---|
text | string | Hashtags or words, separated by spaces, commas or new lines. A missing # is added. | |
network | string: instagram, facebook, tiktok, linkedin, x, threads, bluesky, mastodon, youtube | "instagram" | Network whose hashtag cap applies. |
group_size | integer | Hashtags per group. Default: the network's cap, or 5 when it has no hard cap. | |
case | string: keep, lower | "keep" | keep the first spelling of each hashtag, or lower-case all of them. |
format | string: inline, first_comment | "inline" | inline: one line of tags. first_comment: five "." lines, then the tags. |
Call it
- curl
- Python
- Node.js
- PHP
- Go
- Ruby
- Java
- C#
- Rust
- CLI
curl -X POST https://postboost.co/app/api/tools/hashtag-group-builder \
-H 'Content-Type: application/json' \
-d '{"text":"travel, #Travel #travel_tips 2026 #photo!graphy"}'
from postboost import ApiClient, Configuration
from postboost.api.free_tools_api import FreeToolsApi
from postboost.models import FreeToolBuildHashtagGroupsRequest
with ApiClient(Configuration()) as client:
api = FreeToolsApi(client)
result = api.build_hashtag_groups(FreeToolBuildHashtagGroupsRequest.from_dict({"text": "travel, #Travel #travel_tips 2026 #photo!graphy"}))
print(result.to_dict())
import { FreeToolsApi } from 'postboost';
const api = new FreeToolsApi();
const { body } = await api.buildHashtagGroups({ text: "travel, #Travel #travel_tips 2026 #photo!graphy" });
console.log(body);
use PostBoostClient\Api\FreeToolsApi;
use PostBoostClient\Model\FreeToolBuildHashtagGroupsRequest;
$api = new FreeToolsApi(new GuzzleHttp\Client());
$result = $api->buildHashtagGroups(new FreeToolBuildHashtagGroupsRequest(['text' => "travel, #Travel #travel_tips 2026 #photo!graphy"]));
echo $result;
import (
"context"
"encoding/json"
"fmt"
postboost "github.com/postboost-co/postboost-go"
)
var request postboost.FreeToolBuildHashtagGroupsRequest
if err := json.Unmarshal([]byte(`{"text":"travel, #Travel #travel_tips 2026 #photo!graphy"}`), &request); err != nil {
panic(err)
}
client := postboost.NewAPIClient(postboost.NewConfiguration())
result, _, err := client.FreeToolsAPI.BuildHashtagGroups(context.Background()).FreeToolBuildHashtagGroupsRequest(request).Execute()
fmt.Println(result, err)
require 'postboost'
api = PostBoost::FreeToolsApi.new
result = api.build_hashtag_groups(PostBoost::FreeToolBuildHashtagGroupsRequest.new({ text: "travel, #Travel #travel_tips 2026 #photo!graphy" }))
puts result.to_hash
import com.postboost.ApiClient;
import com.postboost.api.FreeToolsApi;
import com.postboost.model.FreeToolBuildHashtagGroupsRequest;
import com.postboost.model.FreeToolBuildHashtagGroupsResponse;
FreeToolsApi api = new FreeToolsApi(new ApiClient());
FreeToolBuildHashtagGroupsRequest request = FreeToolBuildHashtagGroupsRequest.fromJson("{\"text\":\"travel, #Travel #travel_tips 2026 #photo!graphy\"}");
FreeToolBuildHashtagGroupsResponse result = api.buildHashtagGroups(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<FreeToolBuildHashtagGroupsRequest>(@"{""text"":""travel, #Travel #travel_tips 2026 #photo!graphy""}");
var result = await api.BuildHashtagGroupsAsync(request);
Console.WriteLine(result.ToJson());
use postboost::apis::configuration::Configuration;
use postboost::apis::free_tools_api;
use postboost::models::FreeToolBuildHashtagGroupsRequest;
let config = Configuration::new();
let request: FreeToolBuildHashtagGroupsRequest = serde_json::from_str(r##"{"text":"travel, #Travel #travel_tips 2026 #photo!graphy"}"##)?;
let result = free_tools_api::build_hashtag_groups(&config, request).await?;
println!("{:?}", result);
echo '{"text":"travel, #Travel #travel_tips 2026 #photo!graphy"}' | ./postboost-cli --content-type application/json buildHashtagGroups -
With a token, send Authorization: Bearer YOUR_API_TOKEN as a default header (how, per SDK).
Response
{
"hashtags": [
"#travel",
"#travel_tips",
"#photo"
],
"removed": [
{
"input": "#Travel",
"reason": "duplicate"
},
{
"input": "2026",
"reason": "digits_only"
}
],
"cap": 5,
"group_size": 5,
"groups": [
{
"tags": [
"#travel",
"#travel_tips",
"#photo"
],
"text": "#travel #travel_tips #photo",
"characters": 27
}
],
"over_cap": false
}
With MCP
Connect https://postboost.co/mcp/tools (setup) and ask, for example: Clean, dedupe and split hashtags into groups that fit a network's hashtag cap with the PostBoost build-hashtag-groups tool.
Errors
| Status | When |
|---|---|
401 | The Authorization header holds an invalid token. Leave it out to call as a guest. |
413 | The JSON body is larger than 128 KB. |
422 | A field is invalid; the body lists the errors per field. |
429 | A limit is reached; see limits. |