URL Shortener API für Entwickler: Integration, Endpoints & Code-Beispiele
URL Shortener API in deine App integrieren: REST-Endpoints, Authentifizierung, Rate-Limits und Code-Beispiele für PHP, JavaScript und Python. DSGVO-konform, EU-gehostet.
URL-Kürzung ist eine der einfachsten Aufgaben in der Webentwicklung – solange du sie manuell machst. Sobald du Links programmatisch erstellen, verwalten oder tracken musst, brauchst du eine API.
Ob du Links in automatisierten E-Mail-Kampagnen kürzst, QR-Codes für individualisierte Angebote generierst oder Analytics-Daten in dein eigenes Dashboard importierst: Eine sauber dokumentierte REST-API macht den Unterschied zwischen einem tagelagen Integrationsprojekt und einem 30-Minuten-Job.
Dieser Artikel zeigt, was eine gute URL-Shortener-API leisten muss, wie du die Knapp.-API integrierst und gibt dir fertige Code-Beispiele für die gängigsten Stacks.
Was macht eine gute URL-Shortener-API aus?
REST-Konformität
Eine gute API folgt REST-Prinzipien: HTTP-Verben (GET, POST, PATCH, DELETE) für die richtigen Aktionen, klare Ressourcen-Struktur, JSON als primäres Datenformat, aussagekräftige HTTP-Status-Codes.
Authentifizierung
API-Key-basierte Authentifizierung ist Standard. Bearer-Token (Authorization-Header) ist sicherer als Query-Parameter, weil Keys nicht in Server-Logs auftauchen.
Rate-Limiting mit klaren Headern
Jede API-Antwort sollte Informationen über verbleibende Limits enthalten:
X-RateLimit-Limit: Maximale Requests pro ZeitfensterX-RateLimit-Remaining: Verbleibende RequestsX-RateLimit-Reset: Zeitstempel des nächsten Reset
DSGVO-Konformität
Besonders relevant für EU-Entwickler: Die API darf keine personenbezogenen Daten (IP-Adressen, User-Agents) unverarbeitet an US-Server übermitteln. EU-Hosting und transparente Datenverarbeitung sind Pflicht.
Webhook-Support
Für Event-getriebene Architekturen: Webhooks bei Link-Erstellung, Klick-Ereignissen oder Analytics-Schwellenwerten.
Knapp. API: Überblick
Base URL
https://api.knapp.at/v1
Authentifizierung
Authorization: Bearer <your_api_key>
Content-Type: application/json
API-Keys erstellst du im Dashboard unter Einstellungen → API → Neuer API-Key. Vergib aussagekräftige Namen pro Integration (z. B. newsletter-system, crm-integration).
Verfügbarkeit
Die API ist im Pro-Plan (9€/Monat) und Agentur-Plan (39€/Monat) verfügbar.
Endpoints im Überblick
Links
| Method | Endpoint | Beschreibung |
|--------|----------|--------------|
| POST | /links | Neuen Kurzlink erstellen |
| GET | /links | Alle Links auflisten |
| GET | /links/{id} | Einzelnen Link abrufen |
| PATCH | /links/{id} | Link aktualisieren |
| DELETE | /links/{id} | Link löschen |
Analytics
| Method | Endpoint | Beschreibung |
|--------|----------|--------------|
| GET | /links/{id}/stats | Klick-Statistiken für einen Link |
| GET | /links/{id}/stats/timeline | Klicks nach Zeitverlauf |
| GET | /links/{id}/stats/countries | Klicks nach Land |
| GET | /links/{id}/stats/devices | Klicks nach Gerätetyp |
QR-Codes
| Method | Endpoint | Beschreibung |
|--------|----------|--------------|
| POST | /links/{id}/qr | QR-Code für Link generieren |
| GET | /links/{id}/qr | QR-Code herunterladen |
Code-Beispiele
Link erstellen (JavaScript / Node.js)
const response = await fetch('https://api.knapp.at/v1/links', {
method: 'POST',
headers: {
'Authorization': 'Bearer YOUR_API_KEY',
'Content-Type': 'application/json'
},
body: JSON.stringify({
destination: 'https://meinewebsite.at/produkt/sommer-kollektion',
slug: 'sommer26', // optional, auto-generiert wenn leer
domain: 'links.meinewebsite.at', // optional, Standarddomain wenn leer
tags: ['kampagne-sommer', 'print'], // optional
expires_at: '2026-09-30T23:59:59Z' // optional
})
});
const link = await response.json();
console.log(link.short_url); // https://links.meinewebsite.at/sommer26
Antwort:
{
"id": "lnk_abc123xyz",
"short_url": "https://links.meinewebsite.at/sommer26",
"destination": "https://meinewebsite.at/produkt/sommer-kollektion",
"slug": "sommer26",
"domain": "links.meinewebsite.at",
"created_at": "2026-05-10T09:15:00Z",
"expires_at": "2026-09-30T23:59:59Z",
"tags": ["kampagne-sommer", "print"],
"clicks": 0
}
Link erstellen (PHP)
<?php
$apiKey = 'YOUR_API_KEY';
$payload = [
'destination' => 'https://meinewebsite.at/produkt/sommer-kollektion',
'slug' => 'sommer26',
'tags' => ['kampagne-sommer', 'print']
];
$ch = curl_init('https://api.knapp.at/v1/links');
curl_setopt_array($ch, [
CURLOPT_RETURNTRANSFER => true,
CURLOPT_POST => true,
CURLOPT_POSTFIELDS => json_encode($payload),
CURLOPT_HTTPHEADER => [
'Authorization: Bearer ' . $apiKey,
'Content-Type: application/json'
]
]);
$response = curl_exec($ch);
$link = json_decode($response, true);
echo $link['short_url'];
Link erstellen (Python)
import requests
api_key = "YOUR_API_KEY"
headers = {
"Authorization": f"Bearer {api_key}",
"Content-Type": "application/json"
}
payload = {
"destination": "https://meinewebsite.at/produkt/sommer-kollektion",
"slug": "sommer26",
"tags": ["kampagne-sommer", "print"]
}
response = requests.post(
"https://api.knapp.at/v1/links",
json=payload,
headers=headers
)
link = response.json()
print(link["short_url"])
Analytics abrufen (JavaScript)
// Klick-Statistiken für letzten 30 Tage
const statsResponse = await fetch(
'https://api.knapp.at/v1/links/lnk_abc123xyz/stats?period=30d',
{
headers: {
'Authorization': 'Bearer YOUR_API_KEY'
}
}
);
const stats = await statsResponse.json();
console.log(`Gesamt-Klicks: ${stats.total_clicks}`);
console.log(`Unique Klicks: ${stats.unique_clicks}`);
Antwort:
{
"link_id": "lnk_abc123xyz",
"period": "30d",
"total_clicks": 1247,
"unique_clicks": 983,
"top_country": "AT",
"top_device": "mobile",
"breakdown": {
"countries": [
{"code": "AT", "clicks": 612},
{"code": "DE", "clicks": 389},
{"code": "CH", "clicks": 144}
],
"devices": [
{"type": "mobile", "clicks": 892},
{"type": "desktop", "clicks": 312},
{"type": "tablet", "clicks": 43}
]
}
}
QR-Code generieren und herunterladen (JavaScript)
// QR-Code für Link generieren
const qrResponse = await fetch(
'https://api.knapp.at/v1/links/lnk_abc123xyz/qr',
{
method: 'POST',
headers: {
'Authorization': 'Bearer YOUR_API_KEY',
'Content-Type': 'application/json'
},
body: JSON.stringify({
format: 'svg', // 'svg' oder 'png'
size: 300, // Pixel (bei PNG)
error_correction: 'M', // L, M, Q, H
foreground_color: '#000000',
background_color: '#FFFFFF'
})
}
);
// SVG direkt als String
const svgContent = await qrResponse.text();
Massenerstellung: Bulk-Endpoint
Für Anwendungsfälle mit vielen Links (E-Mail-Kampagnen, individualisierte QR-Codes für Produktverpackungen):
const bulkResponse = await fetch('https://api.knapp.at/v1/links/bulk', {
method: 'POST',
headers: {
'Authorization': 'Bearer YOUR_API_KEY',
'Content-Type': 'application/json'
},
body: JSON.stringify({
links: [
{ destination: 'https://meinewebsite.at/produkt/1', slug: 'prod-1' },
{ destination: 'https://meinewebsite.at/produkt/2', slug: 'prod-2' },
{ destination: 'https://meinewebsite.at/produkt/3', slug: 'prod-3' }
]
})
});
Bulk-Erstellung bis zu 100 Links pro Request. Für größere Batches: Pagination oder Async-Job via Webhook.
Webhooks
Webhooks ermöglichen Event-getriebene Integrationen:
// Webhook-Endpoint in deiner App
app.post('/webhook/knapp', (req, res) => {
const event = req.body;
if (event.type === 'link.clicked') {
const { link_id, country, device, timestamp } = event.data;
// In eigene Datenbank schreiben, CRM aktualisieren, etc.
}
res.status(200).send('OK');
});
Konfiguriere Webhook-URLs im Dashboard unter Einstellungen → Webhooks.
Fehlerbehandlung
const response = await fetch('https://api.knapp.at/v1/links', { /* ... */ });
if (!response.ok) {
const error = await response.json();
switch (response.status) {
case 400:
console.error('Ungültige Anfrage:', error.message);
break;
case 401:
console.error('API-Key ungültig oder abgelaufen');
break;
case 409:
console.error('Slug bereits vergeben:', error.message);
break;
case 429:
const resetTime = response.headers.get('X-RateLimit-Reset');
console.error(`Rate-Limit erreicht. Reset um: ${resetTime}`);
break;
default:
console.error('API-Fehler:', error.message);
}
}
DSGVO-Hinweise für Entwickler
Wenn du die Knapp.-API verwendest, bist du datenschutzrechtlich Auftragsverarbeiter (wenn du Links für Dritte erstellst) oder Verantwortlicher (wenn du Links für eigene Kampagnen erstellst).
Relevante Punkte:
- Knapp. verarbeitet Klickdaten auf EU-Servern
- IP-Adressen werden vor Speicherung anonymisiert
- Kein Datentransfer in Drittländer
- AVV im Pro-Plan enthalten und erforderlich für B2B-Verarbeitung
Wenn du Knapp. in einem Produkt einsetzt, das du an Kunden lieferst, benötigst du möglicherweise einen Sub-AVV mit Knapp. – kontaktiere uns für Enterprise-Verträge.
Fazit
Eine saubere URL-Shortener-API macht Automatisierungen, die ohne API tagelange Handarbeit wären, zur 30-Minuten-Aufgabe. Wichtig für EU-Entwickler: Die API muss EU-gehostet und DSGVO-konform sein – sonst übernimmst du das Datenschutzrisiko für alle deine Kunden.
Die Knapp.-API ist ab dem Pro-Plan verfügbar und deckt alle gängigen Anwendungsfälle ab: Link-Erstellung, Analytics-Abruf, QR-Code-Generierung und Bulk-Operationen.
Jetzt kostenlos mit Knapp. starten – API-Zugang im Pro-Plan (9€/Monat), EU-Hosting, vollständige Dokumentation und DSGVO-konformes Tracking.