REST-API Dokumentation

Programmatische llms.txt-Generierung für Agency-Kunden. Crawlen Sie Websites und erzeugen Sie strukturierte KI-Dateien – vollautomatisch per API-Aufruf.

📋 Auf einen Blick

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).

🏢 Für Agenturinhaber

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.

👩‍💻 Für Entwickler

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).

⚡ Kurzfassung

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):

MethodeBeispielEmpfohlen
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
POST/api/generate.php

Website crawlen und llms.txt generieren. Der Haupt-Endpunkt.

GET/api/generate.php?action=status

Aktuelles Tageskontingent und Lizenzstatus abfragen.

GET/api/generate.php?action=docs

Maschinen-lesbare API-Dokumentation als JSON.

3. Website generieren (POST)

📋 Kurzfassung

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)

ParameterTypPflichtBeschreibung
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)

⚡ Kurzfassung

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"]
}
FeldTypBeschreibung
successbooleanImmer true bei Erfolg
urlstringDie gecrawlte Basis-URL
pages_foundintegerURLs in der Sitemap gefunden
pages_crawledintegerErfolgreich gecrawlt (abzgl. Fehler/Timeout)
duration_secondsfloatGesamtdauer in Sekunden
llms_txtstringDie fertige llms.txt (sofort deploybar)
llms_full_txtstringErweiterte Version mit allen Seitendetails
generated_atstringISO 8601 Zeitstempel
warningsarrayOptionale Warnungen (404er, Timeouts etc.)
pagesarrayNur bei format=json: Details pro Seite (URL, Title, Description, H1, Schema-Types)
💡 Tipp für Agenturen

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

⚡ Kurzfassung

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

🏢 Agentur-Workflow

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

LimitWertHinweis
Requests pro Tag100Reset um 00:00 Uhr CET
URLs pro Requestmax. 500Standard: 50, per max_urls steuerbar
Timeout pro Seite10 SekundenNicht erreichbare Seiten werden übersprungen
Max. Gesamtlaufzeit120 SekundenDanach werden gecrawlte Ergebnisse zurückgegeben
Response-GrößeUnbegrenztTypisch: 20–200 KB JSON
💡 Praxis-Tipp

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"
}
CodeBedeutungTypische Ursache
401Nicht authentifiziertAPI-Key fehlt oder ungültiges Format
403Kein ZugangPro-Key statt Agency, oder Lizenz abgelaufen
405Falsche MethodeGET statt POST für Generierung
422Ungültige ParameterURL fehlt oder ungültiges URL-Format
429Rate Limit100 Requests/Tag überschritten
500Server-FehlerWebsite nicht erreichbar, keine Seiten gefunden

9. Häufige Fragen

Brauche ich einen separaten API-Key?

Nein. Ihr Agency-Lizenzschlüssel ist gleichzeitig Ihr API-Key. Kein separater Developer-Account, keine zusätzliche Registrierung.

Funktioniert die API auch für Websites ohne Sitemap?

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.

Welche Programmiersprache brauche ich?

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.

Kann ich die generierten Dateien für meine Kunden verwenden?

Die generierten Dateien enthalten einen dezenten Verweis auf den Generator. Die Dateien können Sie frei für Ihre Kunden verwenden.

Was passiert wenn mein Tageslimit erreicht ist?

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.

Brauche ich Python oder Node.js auf meinem Server?

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.

Bereit für automatisierte GEO-Optimierung?

Der Agency-Plan mit API-Zugang ist ab 29€/Monat verfügbar.

🏢 Agency-Plan ansehen