DEV Community

Klicktools
Klicktools

Posted on

Why I Built a No-Signup QR & URL Utility Platform (And How to Use the API)

We've all been there: a client needs a quick QR code for a print campaign, or a short link for social media. You search Google, click the first result, and realize you need to create an account, verify your email, and potentially pay after 14 days.

To solve this friction, we built klick.tools. It's a collection of simple web tools that just work - no signup, no expiration dates, and full GDPR compliance.

What's inside?

  • QR code generator: 7 content types (URL, text, WiFi, vCard, email, phone, geo), custom colors and module shapes, automatic WCAG contrast check, and clean export as PNG, SVG or PDF. Rendering happens in the browser, so the payload never leaves the device.
  • URL shortener: shorten a link in seconds, see click stats, and change the target later without reprinting anything.

The developer API

We didn't want to build just another consumer site, so everything is backed by a REST API. Base URL: https://klick.tools/api/v1. Responses are always JSON - lists as { data, count }, writes as { message, data }, errors as { error } with a stable machine-readable code.

Creating a short link is a single POST, and it works without an account at all (rate-limited per IP):

curl -X POST https://klick.tools/api/v1/links \
  -H "Content-Type: application/json" \
  -d '{"targetUrl": "https://example.com/a-very-long-campaign-url"}'
Enter fullscreen mode Exit fullscreen mode

With an API key (kt_live_..., generated in your account) the link is bound to you, so you get click counts, editing and higher quotas. Pass it as a Bearer token or via x-api-key:

const res = await fetch("https://klick.tools/api/v1/links", {
  method: "POST",
  headers: {
    "Content-Type": "application/json",
    Authorization: `Bearer ${process.env.KLICK_TOOLS_API_KEY}`,
  },
  body: JSON.stringify({
    targetUrl: "https://example.com/landing",
    title: "Summer campaign",
  }),
});

const { data } = await res.json();
console.log(data.shortUrl, data.clickCount);
Enter fullscreen mode Exit fullscreen mode

The same pattern covers QR codes via /api/v1/qr - create, list, patch and delete, including the scan history per code.

On privacy

The QR generator runs client-side, so nothing you type into it is uploaded. For the shortener we don't log IP addresses and we don't set tracking cookies, and the whole thing is hosted in Germany. GDPR compliance was a design constraint from day one, not a banner we bolted on later.

What's next?

We are currently working on a browser-side file converter that processes files locally, without the usual upload-and-wait marathon.

Check it out at klick.tools and let me know in the comments: what small web workflow drives you crazy that we should automate next?

Top comments (0)