QR code generator API
Type a link or any text, add UTM tags if you want to see the scans in Google Analytics, pick colours and error correction, then download the code as SVG for print or PNG for screens.
- Endpoint:
POST https://postboost.co/app/api/tools/qr-code-generator(operationIdgenerateQrCode) - Web tool: postboost.co/tools/qr-code-generator
- Token: optional (limits)
- MCP: tool
generate-qr-codeonhttps://postboost.co/mcp/tools
Request
| Field | Type | Default | Description |
|---|---|---|---|
data | string | The link or text to encode. | |
utm | object | UTM tags added to an http(s) link, the same way as buildUtmUrl. | |
error_correction | string: L, M, Q, H | "M" | How much of the code can be damaged and still scan: L 7%, M 15%, Q 25%, H 30%. |
size | integer | 512 | Width and height of the SVG in pixels. |
foreground | string | "#000000" | Colour of the modules, #RRGGBB. |
background | string | "#FFFFFF" | Background colour, #RRGGBB. |
Call it
- curl
- Python
- Node.js
- PHP
- Go
- Ruby
- Java
- C#
- Rust
- CLI
curl -X POST https://postboost.co/app/api/tools/qr-code-generator \
-H 'Content-Type: application/json' \
-d '{"data":"https://postboost.co","utm":{"source":"flyer"},"size":128}'
from postboost import ApiClient, Configuration
from postboost.api.free_tools_api import FreeToolsApi
from postboost.models import FreeToolGenerateQrCodeRequest
with ApiClient(Configuration()) as client:
api = FreeToolsApi(client)
result = api.generate_qr_code(FreeToolGenerateQrCodeRequest.from_dict({"data": "https://postboost.co", "utm": {"source": "flyer"}, "size": 128}))
print(result.to_dict())
import { FreeToolsApi } from 'postboost';
const api = new FreeToolsApi();
const { body } = await api.generateQrCode({ data: "https://postboost.co", utm: { source: "flyer" }, size: 128 });
console.log(body);
use PostBoostClient\Api\FreeToolsApi;
use PostBoostClient\Model\FreeToolGenerateQrCodeRequest;
$api = new FreeToolsApi(new GuzzleHttp\Client());
$result = $api->generateQrCode(new FreeToolGenerateQrCodeRequest(['data' => "https://postboost.co", 'utm' => ['source' => "flyer"], 'size' => 128]));
echo $result;
import (
"context"
"encoding/json"
"fmt"
postboost "github.com/postboost-co/postboost-go"
)
var request postboost.FreeToolGenerateQrCodeRequest
if err := json.Unmarshal([]byte(`{"data":"https://postboost.co","utm":{"source":"flyer"},"size":128}`), &request); err != nil {
panic(err)
}
client := postboost.NewAPIClient(postboost.NewConfiguration())
result, _, err := client.FreeToolsAPI.GenerateQrCode(context.Background()).FreeToolGenerateQrCodeRequest(request).Execute()
fmt.Println(result, err)
require 'postboost'
api = PostBoost::FreeToolsApi.new
result = api.generate_qr_code(PostBoost::FreeToolGenerateQrCodeRequest.new({ data: "https://postboost.co", utm: { source: "flyer" }, size: 128 }))
puts result.to_hash
import com.postboost.ApiClient;
import com.postboost.api.FreeToolsApi;
import com.postboost.model.FreeToolGenerateQrCodeRequest;
import com.postboost.model.FreeToolGenerateQrCodeResponse;
FreeToolsApi api = new FreeToolsApi(new ApiClient());
FreeToolGenerateQrCodeRequest request = FreeToolGenerateQrCodeRequest.fromJson("{\"data\":\"https://postboost.co\",\"utm\":{\"source\":\"flyer\"},\"size\":128}");
FreeToolGenerateQrCodeResponse result = api.generateQrCode(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<FreeToolGenerateQrCodeRequest>(@"{""data"":""https://postboost.co"",""utm"":{""source"":""flyer""},""size"":128}");
var result = await api.GenerateQrCodeAsync(request);
Console.WriteLine(result.ToJson());
use postboost::apis::configuration::Configuration;
use postboost::apis::free_tools_api;
use postboost::models::FreeToolGenerateQrCodeRequest;
let config = Configuration::new();
let request: FreeToolGenerateQrCodeRequest = serde_json::from_str(r##"{"data":"https://postboost.co","utm":{"source":"flyer"},"size":128}"##)?;
let result = free_tools_api::generate_qr_code(&config, request).await?;
println!("{:?}", result);
echo '{"data":"https://postboost.co","utm":{"source":"flyer"},"size":128}' | ./postboost-cli --content-type application/json generateQrCode -
With a token, send Authorization: Bearer YOUR_API_TOKEN as a default header (how, per SDK).
Response
{
"data": "https://postboost.co?utm_source=flyer",
"svg": "<svg xmlns=\"http://www.w3.org/2000/svg\" width=\"128\" height=\"128\" viewBox=\"0 0 37 37\" shape-rendering=\"crispEdges\"><rect width=\"37\" height=\"37\" fill=\"#FFFFFF\"/><path fill=\"#000000\" d=\"M4 4h7v1h-7zM12 4h1v1h-1zM18 4h1v1h-1zM20 4h1v1h-1zM23 4h2v1h-2zM26 4h7v1h-7zM4 5h1v1h-1zM10 5h1v1h-1zM12 5h3v1h-3zM17 5h2v1h-2zM20 5h3v1h-3zM26 5h1v1h-1zM32 5h1v1h-1zM4 6h1v1h-1zM6 6h3v1h-3zM10 6h1v1h-1zM13 6h3v1h-3zM17 6h1v1h-1zM23 6h2v1h-2zM26 6h1v1h-1zM28 6h3v1h-3zM32 6h1v1h-1zM4 7h1v1h-1zM6 7h3v1h-3zM10 7h1v1h-1zM12 7h2v1h-2zM15 7h1v1h-1zM19 7h1v1h-1zM21 7h1v1h-1zM24 7h1v1h-1zM26 7h1v1h-1zM28 7h3v1h-3zM32 7h1v1h-1zM4 8h1v1h-1zM6 8h3v1h-3zM10 8h1v1h-1zM13 8h1v1h-1zM16 8h5v1h-5zM23 8h1v1h-1zM26 8h1v1h-1zM28 8h3v1h-3zM32 8h1v1h-1zM4 9h1v1h-1zM10 9h1v1h-1zM13 9h2v1h-2zM18 9h1v1h-1zM22 9h3v1h-3zM26 9h1v1h-1zM32 9h1v1h-1zM4 10h7v1h-7zM12 10h1v1h-1zM14 10h1v1h-1zM16 10h1v1h-1zM18 10h1v1h-1zM20 10h1v1h-1zM22 10h1v1h-1zM24 10h1v1h-1zM26 10h7v1h-7zM12 11h7v1h-7zM21 11h3v1h-3zM4 12h1v1h-1zM6 12h2v1h-2zM9 12h3v1h-3zM14 12h1v1h-1zM17 12h3v1h-3zM22 12h1v1h-1zM24 12h1v1h-1zM26 12h1v1h-1zM29 12h1v1h-1zM31 12h2v1h-2zM4 13h1v1h-1zM6 13h1v1h-1zM8 13h1v1h-1zM16 13h1v1h-1zM20 13h2v1h-2zM23 13h1v1h-1zM25 13h4v1h-4zM32 13h1v1h-1zM8 14h1v1h-1zM10 14h1v1h-1zM13 14h1v1h-1zM16 14h1v1h-1zM18 14h1v1h-1zM22 14h1v1h-1zM27 14h1v1h-1zM30 14h2v1h-2zM5 15h1v1h-1zM7 15h2v1h-2zM11 15h4v1h-4zM17 15h2v1h-2zM22 15h1v1h-1zM24 15h1v1h-1zM27 15h1v1h-1zM32 15h1v1h-1zM5 16h2v1h-2zM8 16h4v1h-4zM13 16h1v1h-1zM16 16h1v1h-1zM21 16h1v1h-1zM23 16h1v1h-1zM27 16h1v1h-1zM29 16h2v1h-2zM4 17h2v1h-2zM7 17h1v1h-1zM15 17h3v1h-3zM19 17h5v1h-5zM26 17h1v1h-1zM30 17h3v1h-3zM4 18h2v1h-2zM7 18h6v1h-6zM15 18h1v1h-1zM18 18h1v1h-1zM20 18h2v1h-2zM23 18h3v1h-3zM27 18h2v1h-2zM30 18h3v1h-3zM4 19h2v1h-2zM7 19h1v1h-1zM9 19h1v1h-1zM15 19h1v1h-1zM17 19h1v1h-1zM20 19h1v1h-1zM23 19h1v1h-1zM26 19h1v1h-1zM28 19h1v1h-1zM31 19h1v1h-1zM6 20h2v1h-2zM10 20h3v1h-3zM22 20h1v1h-1zM24 20h2v1h-2zM28 20h2v1h-2zM31 20h1v1h-1zM5 21h2v1h-2zM8 21h2v1h-2zM13 21h3v1h-3zM17 21h1v1h-1zM19 21h1v1h-1zM21 21h1v1h-1zM24 21h1v1h-1zM27 21h1v1h-1zM29 21h3v1h-3zM4 22h1v1h-1zM6 22h3v1h-3zM10 22h2v1h-2zM13 22h1v1h-1zM16 22h1v1h-1zM19 22h3v1h-3zM26 22h2v1h-2zM30 22h1v1h-1zM11 23h3v1h-3zM16 23h1v1h-1zM20 23h4v1h-4zM25 23h2v1h-2zM28 23h1v1h-1zM30 23h1v1h-1zM5 24h4v1h-4zM10 24h1v1h-1zM12 24h2v1h-2zM15 24h3v1h-3zM19 24h1v1h-1zM21 24h2v1h-2zM24 24h7v1h-7zM12 25h1v1h-1zM14 25h5v1h-5zM24 25h1v1h-1zM28 25h5v1h-5zM4 26h7v1h-7zM12 26h3v1h-3zM17 26h1v1h-1zM20 26h5v1h-5zM26 26h1v1h-1zM28 26h2v1h-2zM31 26h1v1h-1zM4 27h1v1h-1zM10 27h1v1h-1zM12 27h2v1h-2zM15 27h2v1h-2zM22 27h3v1h-3zM28 27h2v1h-2zM31 27h2v1h-2zM4 28h1v1h-1zM6 28h3v1h-3zM10 28h1v1h-1zM13 28h3v1h-3zM18 28h2v1h-2zM21 28h1v1h-1zM24 28h5v1h-5zM30 28h1v1h-1zM4 29h1v1h-1zM6 29h3v1h-3zM10 29h1v1h-1zM12 29h1v1h-1zM14 29h1v1h-1zM18 29h5v1h-5zM24 29h2v1h-2zM27 29h3v1h-3zM32 29h1v1h-1zM4 30h1v1h-1zM6 30h3v1h-3zM10 30h1v1h-1zM12 30h3v1h-3zM17 30h2v1h-2zM21 30h1v1h-1zM25 30h1v1h-1zM27 30h1v1h-1zM30 30h1v1h-1zM32 30h1v1h-1zM4 31h1v1h-1zM10 31h1v1h-1zM14 31h1v1h-1zM16 31h3v1h-3zM22 31h4v1h-4zM28 31h2v1h-2zM31 31h1v1h-1zM4 32h7v1h-7zM12 32h2v1h-2zM17 32h1v1h-1zM22 32h6v1h-6zM29 32h1v1h-1zM31 32h1v1h-1z\"/></svg>",
"warnings": [
"Add medium, campaign: GA4 expects source, medium and campaign."
]
}
With MCP
Connect https://postboost.co/mcp/tools (setup) and ask, for example: Generate a QR code (SVG) for a link or text, with optional UTM tags with the PostBoost generate-qr-code 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. |