UTM builder API
Add utm_source, utm_medium and utm_campaign to any link, keep its existing query and #anchor intact, and copy a clean, consistent tagged URL for each network.
- Endpoint:
POST https://postboost.co/app/api/tools/utm-builder(operationIdbuildUtmUrl) - Web tool: postboost.co/tools/utm-builder
- Token: optional (limits)
- MCP: tool
build-utm-urlonhttps://postboost.co/mcp/tools
Request
| Field | Type | Default | Description |
|---|---|---|---|
url | string | The http(s) page URL. | |
utm_source | string | ||
utm_medium | string | ||
utm_campaign | string | ||
utm_term | string | ||
utm_content | string | ||
utm_id | string |
Call it
- curl
- Python
- Node.js
- PHP
- Go
- Ruby
- Java
- C#
- Rust
- CLI
curl -X POST https://postboost.co/app/api/tools/utm-builder \
-H 'Content-Type: application/json' \
-d '{"url":"https://postboost.co/pricing?plan=pro#faq","utm_source":"linkedin","utm_medium":"social","utm_campaign":"q4 launch"}'
from postboost import ApiClient, Configuration
from postboost.api.free_tools_api import FreeToolsApi
from postboost.models import FreeToolBuildUtmUrlRequest
with ApiClient(Configuration()) as client:
api = FreeToolsApi(client)
result = api.build_utm_url(FreeToolBuildUtmUrlRequest.from_dict({"url": "https://postboost.co/pricing?plan=pro#faq", "utm_source": "linkedin", "utm_medium": "social", "utm_campaign": "q4 launch"}))
print(result.to_dict())
import { FreeToolsApi } from 'postboost';
const api = new FreeToolsApi();
const { body } = await api.buildUtmUrl({ url: "https://postboost.co/pricing?plan=pro#faq", utmSource: "linkedin", utmMedium: "social", utmCampaign: "q4 launch" });
console.log(body);
use PostBoostClient\Api\FreeToolsApi;
use PostBoostClient\Model\FreeToolBuildUtmUrlRequest;
$api = new FreeToolsApi(new GuzzleHttp\Client());
$result = $api->buildUtmUrl(new FreeToolBuildUtmUrlRequest(['url' => "https://postboost.co/pricing?plan=pro#faq", 'utm_source' => "linkedin", 'utm_medium' => "social", 'utm_campaign' => "q4 launch"]));
echo $result;
import (
"context"
"encoding/json"
"fmt"
postboost "github.com/postboost-co/postboost-go"
)
var request postboost.FreeToolBuildUtmUrlRequest
if err := json.Unmarshal([]byte(`{"url":"https://postboost.co/pricing?plan=pro#faq","utm_source":"linkedin","utm_medium":"social","utm_campaign":"q4 launch"}`), &request); err != nil {
panic(err)
}
client := postboost.NewAPIClient(postboost.NewConfiguration())
result, _, err := client.FreeToolsAPI.BuildUtmUrl(context.Background()).FreeToolBuildUtmUrlRequest(request).Execute()
fmt.Println(result, err)
require 'postboost'
api = PostBoost::FreeToolsApi.new
result = api.build_utm_url(PostBoost::FreeToolBuildUtmUrlRequest.new({ url: "https://postboost.co/pricing?plan=pro#faq", utm_source: "linkedin", utm_medium: "social", utm_campaign: "q4 launch" }))
puts result.to_hash
import com.postboost.ApiClient;
import com.postboost.api.FreeToolsApi;
import com.postboost.model.FreeToolBuildUtmUrlRequest;
import com.postboost.model.FreeToolBuildUtmUrlResponse;
FreeToolsApi api = new FreeToolsApi(new ApiClient());
FreeToolBuildUtmUrlRequest request = FreeToolBuildUtmUrlRequest.fromJson("{\"url\":\"https://postboost.co/pricing?plan=pro#faq\",\"utm_source\":\"linkedin\",\"utm_medium\":\"social\",\"utm_campaign\":\"q4 launch\"}");
FreeToolBuildUtmUrlResponse result = api.buildUtmUrl(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<FreeToolBuildUtmUrlRequest>(@"{""url"":""https://postboost.co/pricing?plan=pro#faq"",""utm_source"":""linkedin"",""utm_medium"":""social"",""utm_campaign"":""q4 launch""}");
var result = await api.BuildUtmUrlAsync(request);
Console.WriteLine(result.ToJson());
use postboost::apis::configuration::Configuration;
use postboost::apis::free_tools_api;
use postboost::models::FreeToolBuildUtmUrlRequest;
let config = Configuration::new();
let request: FreeToolBuildUtmUrlRequest = serde_json::from_str(r##"{"url":"https://postboost.co/pricing?plan=pro#faq","utm_source":"linkedin","utm_medium":"social","utm_campaign":"q4 launch"}"##)?;
let result = free_tools_api::build_utm_url(&config, request).await?;
println!("{:?}", result);
echo '{"url":"https://postboost.co/pricing?plan=pro#faq","utm_source":"linkedin","utm_medium":"social","utm_campaign":"q4 launch"}' | ./postboost-cli --content-type application/json buildUtmUrl -
With a token, send Authorization: Bearer YOUR_API_TOKEN as a default header (how, per SDK).
Response
{
"url": "https://postboost.co/pricing?plan=pro&utm_source=linkedin&utm_medium=social&utm_campaign=q4%20launch#faq",
"warnings": [
"utm_campaign has spaces"
]
}
With MCP
Connect https://postboost.co/mcp/tools (setup) and ask, for example: Build a UTM-tagged campaign URL with the PostBoost build-utm-url 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. |