REST-API Dokumentation
Programmatische llms.txt-Generierung für Agency-Kunden. Crawlen Sie Websites und erzeugen Sie strukturierte KI-Dateien – vollautomatisch per API-Aufruf.
Die API nimmt eine Website-URL entgegen, crawlt automatisch die Sitemap, sammelt Metadaten aller Seiten und liefert eine fertige llms.txt und llms-full.txt als JSON-Response zurück.
Authentifizierung per API-Key (= Ihr Agency-Lizenzschlüssel). Limit: 100 Requests/Tag, max. 500 URLs pro Request.
Voraussetzung: Agency-Plan (ab 29€/Monat).
Sie können die API nutzen, um für alle Ihre Kunden-Websites automatisiert llms.txt-Dateien zu erstellen – ohne manuelles Copy & Paste. Ideal für monatliche SEO-Reports oder GEO-Onboarding neuer Kunden.
Standard-REST-API mit JSON-Responses. Keine SDK nötig – ein einfacher POST mit curl, Python, JavaScript oder jeder HTTP-Library reicht. Vollständige Fehlerbehandlung mit HTTP-Statuscodes.
1. Authentifizierung
Jeder API-Request muss authentifiziert werden. Ihr API-Key ist identisch mit Ihrem Agency-Lizenzschlüssel (Format: LLMS-XXXX-XXXX-XXXX-XXXX).
Senden Sie Ihren Lizenzschlüssel als X-API-Key-Header mit. Das ist alles. Kein OAuth, kein Token-Refresh, kein separater API-Key.
Es gibt drei Möglichkeiten, den Key zu übergeben (in Prioritätsreihenfolge):
| Methode | Beispiel | Empfohlen |
|---|---|---|
| HTTP-Header | X-API-Key: LLMS-XXXX-XXXX-XXXX-XXXX |
✅ Ja |
| JSON-Body | {"key": "LLMS-XXXX-..."} |
Alternativ |
| Query-Parameter | ?key=LLMS-XXXX-... |
Nur für GET |
Pro- und Free-Keys erhalten bei API-Zugriff einen 403-Fehler mit Hinweis auf den Agency-Upgrade-Pfad.
2. Endpunkte
Alle Endpunkte liegen unter der Basis-URL:
https://www.llmstxtgenerator.de/api/generate.php
Website crawlen und llms.txt generieren. Der Haupt-Endpunkt.
Aktuelles Tageskontingent und Lizenzstatus abfragen.
Maschinen-lesbare API-Dokumentation als JSON.
3. Website generieren (POST)
Senden Sie eine URL → die API crawlt die Sitemap, holt Metadaten → Sie erhalten llms_txt und llms_full_txt als fertigen Text in der JSON-Response.
Request-Body (JSON)
| Parameter | Typ | Pflicht | Beschreibung |
|---|---|---|---|
url |
string | ✅ Ja | Ziel-URL der Website (mit https://) |
max_urls |
integer | Nein | Max. Anzahl URLs (1–500, Standard: 50) |
format |
string | Nein | "txt" (Standard) oder "json" – bei json werden zusätzlich alle Seitendetails mitgeliefert |
key |
string | Nein | API-Key, falls nicht im Header |
Ablauf im Detail
Nach dem Empfang Ihres Requests durchläuft die API folgende Schritte:
1. Sitemap-Suche – Die API prüft /sitemap.xml, /sitemap_index.xml, /wp-sitemap.xml und parsed zusätzlich /robots.txt nach Sitemap-Einträgen. Sitemap-Indizes werden rekursiv aufgelöst.
2. Fallback auf Homepage-Links – Findet sich keine Sitemap, werden alle internen Links der Homepage extrahiert.
3. Metadaten-Crawling – Für jede URL werden <title>, <meta description>, <h1> und Schema.org @type-Annotationen extrahiert.
4. Kategorisierung – Jede URL wird automatisch kategorisiert (Hauptseiten, Produkte, Kategorien, Blog, Ratgeber, FAQ, Über uns, Rechtliches) anhand von URL-Pfaden und Schema.org-Typen.
5. Generierung – Aus den Metadaten wird eine strukturierte llms.txt und eine erweiterte llms-full.txt erzeugt.
4. Status & Kontingent (GET)
Rufen Sie ?action=status auf, um zu sehen wie viele Requests Sie heute noch haben. Nützlich für Monitoring und Dashboard-Integration.
GET /api/generate.php?action=status
Header: X-API-Key: LLMS-XXXX-XXXX-XXXX-XXXX
Response
{
"status": "active",
"plan": "agency-monthly",
"expires": "2026-04-22",
"usage_today": {
"requests": 12,
"limit": 100,
"remaining": 88,
"urls_crawled": 340
}
}
5. Response-Struktur
Eine erfolgreiche Generierung liefert folgende JSON-Struktur:
{
"success": true,
"url": "https://example.com",
"pages_found": 87,
"pages_crawled": 50,
"duration_seconds": 14.3,
"llms_txt": "# Example.com\n> Beschreibung...\n\n## Hauptseiten\n...",
"llms_full_txt": "# example.com – Vollständige Seitenübersicht\n...",
"generated_at": "2026-02-22T15:30:00+01:00",
"warnings": ["https://example.com/old-page: HTTP 404"]
}
| Feld | Typ | Beschreibung |
|---|---|---|
success | boolean | Immer true bei Erfolg |
url | string | Die gecrawlte Basis-URL |
pages_found | integer | URLs in der Sitemap gefunden |
pages_crawled | integer | Erfolgreich gecrawlt (abzgl. Fehler/Timeout) |
duration_seconds | float | Gesamtdauer in Sekunden |
llms_txt | string | Die fertige llms.txt (sofort deploybar) |
llms_full_txt | string | Erweiterte Version mit allen Seitendetails |
generated_at | string | ISO 8601 Zeitstempel |
warnings | array | Optionale Warnungen (404er, Timeouts etc.) |
pages | array | Nur bei format=json: Details pro Seite (URL, Title, Description, H1, Schema-Types) |
Die Felder llms_txt und llms_full_txt können direkt als Datei gespeichert und ins Webroot des Kunden hochgeladen werden. Kein Nachbearbeiten nötig – die Dateien sind sofort einsatzbereit.
6. Code-Beispiele
Ein einfacher HTTP-POST mit JSON-Body. Keine Library, kein SDK nötig. Funktioniert mit jedem HTTP-Client.
curl -X POST https://www.llmstxtgenerator.de/api/generate.php \
-H "Content-Type: application/json" \
-H "X-API-Key: LLMS-XXXX-XXXX-XXXX-XXXX" \
-d '{"url": "https://example.com", "max_urls": 100}'
import requests
response = requests.post(
"https://www.llmstxtgenerator.de/api/generate.php",
headers={"X-API-Key": "LLMS-XXXX-XXXX-XXXX-XXXX"},
json={"url": "https://example.com", "max_urls": 100}
)
data = response.json()
# llms.txt direkt als Datei speichern
with open("llms.txt", "w") as f:
f.write(data["llms_txt"])
print(f"{data['pages_crawled']} Seiten gecrawlt in {data['duration_seconds']}s")
const response = await fetch(
"https://www.llmstxtgenerator.de/api/generate.php",
{
method: "POST",
headers: {
"Content-Type": "application/json",
"X-API-Key": "LLMS-XXXX-XXXX-XXXX-XXXX"
},
body: JSON.stringify({
url: "https://example.com",
max_urls: 100
})
}
);
const data = await response.json();
console.log(data.llms_txt);
console.log(`${data.pages_crawled} Seiten in ${data.duration_seconds}s`);
$ch = curl_init("https://www.llmstxtgenerator.de/api/generate.php");
curl_setopt_array($ch, [
CURLOPT_POST => true,
CURLOPT_RETURNTRANSFER => true,
CURLOPT_HTTPHEADER => [
"Content-Type: application/json",
"X-API-Key: LLMS-XXXX-XXXX-XXXX-XXXX"
],
CURLOPT_POSTFIELDS => json_encode([
"url" => "https://example.com",
"max_urls" => 100
])
]);
$response = curl_exec($ch);
curl_close($ch);
$data = json_decode($response, true);
// llms.txt direkt als Datei speichern
file_put_contents("llms.txt", $data["llms_txt"]);
echo $data["pages_crawled"] . " Seiten gecrawlt\n";
Praxis-Beispiel: Batch-Generierung für mehrere Kunden
Sie betreuen 20 Kunden und möchten für alle monatlich eine frische llms.txt erzeugen? Legen Sie die URLs in eine Liste und lassen Sie ein kleines Skript alle nacheinander abarbeiten. 100 Requests/Tag reichen für die meisten Agenturen locker aus.
#!/bin/bash
# Monatliche llms.txt-Generierung für alle Kunden
API_KEY="LLMS-XXXX-XXXX-XXXX-XXXX"
KUNDEN=(
"https://kunde1-shop.de"
"https://kunde2-agentur.com"
"https://kunde3-handwerk.de"
)
for url in "${KUNDEN[@]}"; do
DOMAIN=$(echo "$url" | sed 's|https://||;s|/.*||')
echo "Generiere: $DOMAIN ..."
curl -s -X POST https://www.llmstxtgenerator.de/api/generate.php \
-H "Content-Type: application/json" \
-H "X-API-Key: $API_KEY" \
-d "{\"url\": \"$url\", \"max_urls\": 200}" \
| jq -r '.llms_txt' > "${DOMAIN}-llms.txt"
echo " → ${DOMAIN}-llms.txt gespeichert"
sleep 2 # Fair-Use-Pause
done
import requests, time
API_KEY = "LLMS-XXXX-XXXX-XXXX-XXXX"
kunden = [
"https://kunde1-shop.de",
"https://kunde2-agentur.com",
"https://kunde3-handwerk.de",
]
for url in kunden:
domain = url.replace("https://", "").replace("/", "")
print(f"Generiere: {domain} ...")
r = requests.post(
"https://www.llmstxtgenerator.de/api/generate.php",
headers={"X-API-Key": API_KEY},
json={"url": url, "max_urls": 200},
timeout=120
)
data = r.json()
if data.get("success"):
with open(f"{domain}-llms.txt", "w") as f:
f.write(data["llms_txt"])
print(f" → {data['pages_crawled']} Seiten, {data['duration_seconds']}s")
else:
print(f" → Fehler: {data.get('error')}")
time.sleep(2) # Fair-Use-Pause
7. Limits & Fair Use
| Limit | Wert | Hinweis |
|---|---|---|
| Requests pro Tag | 100 | Reset um 00:00 Uhr CET |
| URLs pro Request | max. 500 | Standard: 50, per max_urls steuerbar |
| Timeout pro Seite | 10 Sekunden | Nicht erreichbare Seiten werden übersprungen |
| Max. Gesamtlaufzeit | 120 Sekunden | Danach werden gecrawlte Ergebnisse zurückgegeben |
| Response-Größe | Unbegrenzt | Typisch: 20–200 KB JSON |
Mit 100 Requests/Tag können Sie problemlos 100 verschiedene Websites täglich generieren. Für einen typischen Agentur-Workflow (20 Kunden, monatliche Aktualisierung) brauchen Sie nur 20 Requests pro Monat. Bei höherem Bedarf sprechen Sie uns an.
8. Fehlercodes
Fehler-Responses folgen immer diesem Format:
{
"error": "Beschreibung des Fehlers",
"code": 422,
"detail": "Optionale zusätzliche Information"
}
| Code | Bedeutung | Typische Ursache |
|---|---|---|
401 | Nicht authentifiziert | API-Key fehlt oder ungültiges Format |
403 | Kein Zugang | Pro-Key statt Agency, oder Lizenz abgelaufen |
405 | Falsche Methode | GET statt POST für Generierung |
422 | Ungültige Parameter | URL fehlt oder ungültiges URL-Format |
429 | Rate Limit | 100 Requests/Tag überschritten |
500 | Server-Fehler | Website nicht erreichbar, keine Seiten gefunden |
9. Häufige Fragen
Nein. Ihr Agency-Lizenzschlüssel ist gleichzeitig Ihr API-Key. Kein separater Developer-Account, keine zusätzliche Registrierung.
Ja. Findet die API keine Sitemap, werden automatisch alle internen Links von der Homepage extrahiert. Eine Sitemap liefert allerdings deutlich bessere und vollständigere Ergebnisse.
Keine bestimmte. Alles was HTTP-Requests senden kann, funktioniert: Python, JavaScript, PHP, Ruby, Go, Java, C#, Bash/cURL – oder sogar Zapier und Make (Integromat). Die API spricht Standard-REST mit JSON.
Die generierten Dateien enthalten einen dezenten Verweis auf den Generator. Die Dateien können Sie frei für Ihre Kunden verwenden.
Sie erhalten einen 429-Fehler. Das Limit wird täglich um Mitternacht (CET) zurückgesetzt. Über den Status-Endpunkt (?action=status) können Sie jederzeit Ihr verbleibendes Kontingent prüfen.
Nein. Die API läuft komplett auf unserer Infrastruktur. Sie senden lediglich einen HTTP-Request und erhalten die fertige llms.txt als Text. Das geht auch mit reinem PHP auf einem Shared-Hosting-Paket – sogar per Cronjob.
Der Agency-Plan mit API-Zugang ist ab 29€/Monat verfügbar.
🏢 Agency-Plan ansehen