Blog›Guides

Entwicklerhandbuch für den /dataset-Endpunkt von Wikiprompt

Eine präzise, referenzartige Durchführung der /dataset-Manifest- und /dataset/prompts-Endpunkte: Antwortstrukturen, jedes Feld, Keyset-Paginierung, Caching und Fehlerbehandlung.

Entwicklerhandbuch für den /dataset-Endpunkt von Wikiprompt

Ein Entwicklerleitfaden für den /dataset-Endpunkt von Wikiprompt

Wikiprompt ist ein öffentlicher, kuratierter Katalog von KI-Prompts, der ChatGPT, Claude, Gemini, GPT Image, Midjourney, Seedance, Veo, Kling, Nano Banana, Grok und mehr abdeckt. Anstatt die Live-Site zu scrapen, um diesen Katalog programmatisch abzurufen, gibt es jetzt einen dedizierten Bulk-Export: /dataset. Dieser Beitrag dokumentiert ihn so, wie man eine Drittanbieter-API dokumentiert haben möchte: Antwortstrukturen, Feldsemantik, Paginierungsmechanik, Caching und Fehlerbehandlung, mit ausführbaren Beispielen.

Zwei Endpunkte, eine Aufgabe

Es gibt genau zwei URLs, die du benötigst:

  • https://www.wikiprompt.org/dataset (Manifest)
  • https://www.wikiprompt.org/dataset/prompts (Daten)
  • Das Manifest ist Metadaten über den Export. Der Datenendpunkt ist der Export selbst, paginiert. Beide geben reines JSON zurück, kein API-Schlüssel, kein Auth-Header, nichts zum Registrieren.

    Die Manifest-Antwort

    Ein GET auf das Dataset Manifest gibt etwas zurück, das so aussieht:

    {

    "total_prompts": 55000,

    "record_fields": [

    "slug", "url", "title", "description", "content",

    "category", "tags", "media", "model", "metadata",

    "author", "original_source", "created_at", "updated_at"

    ],

    "pagination": {

    "endpoint": "https://www.wikiprompt.org/dataset/prompts",

    "cursor_param": "after",

    "limit_param": "limit",

    "default_limit": 200,

    "max_limit": 500

    }

    }

    Behandle total_prompts als eine Live-, ungefähre Zahl, nicht als feste Konstante. Der Katalog wächst täglich, also pinne deine Integration an record_fields und den pagination-Block, anstatt die Zahl irgendwo in deinem Code fest zu codieren.

    Die Daten-Antwort

    Ein GET auf /dataset/prompts gibt eine Seite mit Datensätzen plus einen Cursor für die nächste Seite zurück:

    {

    "count": 500,

    "records": [

    {

    "slug": "one-brick-monumental-shadow-architectural-photo",

    "url": "https://www.wikiprompt.org/one-brick-monumental-shadow-architectural-photo",

    "title": "One Brick: Monumental Shadow Architectural Photo",

    "description": "A single brick photographed to cast a monumental architectural shadow.",

    "content": "the actual prompt text goes here, verbatim",

    "category": "creative",

    "tags": ["photography", "architecture", "shadow-play"],

    "media": ["https://www.wikiprompt.org/media/tw/..."],

    "model": "Midjourney",

    "metadata": {

    "media_type": "image",

    "aspect_ratio": "16:9",

    "style": ["minimalist", "high-contrast"],

    "assessment": { "creativity": 4, "usefulness": 3 }

    },

    "author": "some_handle",

    "original_source": "https://twitter.com/some_handle/status/...",

    "created_at": "2026-03-11T00:00:00Z",

    "updated_at": "2026-03-11T00:00:00Z"

    }

    ],

    "next": "https://www.wikiprompt.org/dataset/prompts?after=<cursor>&limit=500"

    }

    Feldreferenz

    Jeder Datensatz trägt dieselben vierzehn Felder. Diejenigen, die erwähnenswert sind:

  • `slug` / `url`: slug ist die stabile Kennung; url ist die kanonische Seite, nützlich, wenn du später zurückverlinken oder einen einzelnen Datensatz erneut crawlen möchtest.
  • `content`: der eigentliche Prompt-Text. Dies ist das Feld, das die meisten Integrationen betrifft; alles andere ist Metadaten darum herum.
  • `category`: eine von creative, marketing, personal, productivity, coding, education, business, research, other.
  • `media`: ein Array von Bild-/Video-URLs, wenn der Prompt visuelle Ausgabe erzeugt hat. Leer für reine Text-Prompts.
  • `model`: das KI-Modell, das der Prompt anspricht oder mit dem er erzeugt wurde, als Freitext-String ("Midjourney", "GPT-4o", "Veo", etc).
  • `metadata`: ein strukturiertes Objekt mit media_type, aspect_ratio, style und einem assessment-Block, der Qualitätsdimensionen wie Kreativität und Nützlichkeit bewertet. Dies ist null für einfache Text-Prompts, die nie eine Bild-/Video-Bewertung hatten.
  • `original_source`: der Link zum ursprünglichen Beitrag, von dem der Prompt stammt. Siehe den Hinweis zur Attribution unten, dieses Feld ist wichtig, wenn du die Daten nachgelagert wiederverwendest.
  • `created_at` / `updated_at`: ISO 8601 Zeitstempel. updated_at ändert sich, wenn ein Datensatz nachträglich bearbeitet oder neu angereichert wird.
  • Paginierungsmechanik

    Der Endpunkt verwendet Keyset-Paginierung, nicht Seitennummern. Zwei Parameter steuern sie:

  • limit: wie viele Datensätze pro Seite, Standard 200, Maximum 500.
  • after: ein undurchsichtiger Cursor, der dir in jeder Antwort über die next-URL zurückgespiegelt wird.
  • Der Vertrag ist einfach: Rufe den Endpunkt auf, lies next, rufe next wörtlich auf, wiederhole, bis next null ist. Konstruiere den after-Wert nicht selbst; behandle ihn als undurchsichtiges Token.

    curl "https://www.wikiprompt.org/dataset/prompts?limit=500"

    Ein vollständiger Crawl in Python sieht so aus:

    import requests

    url = "https://www.wikiprompt.org/dataset/prompts?limit=500"

    records = []

    while url:

    resp = requests.get(url, timeout=30)

    resp.raise_for_status()

    payload = resp.json()

    records.extend(payload["records"])

    url = payload["next"]

    print(f"pulled {len(records)} prompts")

    Bei 500 pro Seite und 55.000+ Datensätzen sind das ungefähr 110 Anfragen für eine vollständige Synchronisierung, oder weit weniger für eine inkrementelle, wenn du zusätzlich clientseitig auf updated_at filterst.

    Caching und CORS

    Beide Endpunkte sind edge-cached, sodass wiederholte Anfragen für dieselbe Seite (gleicher after-Wert) auf unserer Seite günstig und schnell sind, und für dich schnell. Access-Control-Allow-Origin: * ist auf jeder Antwort gesetzt, sodass du dies direkt aus Browser-JavaScript mit fetch() aufrufen kannst, kein Proxy nötig. Es gibt kein Ratenlimit, das an einen API-Schlüssel gebunden ist, weil es keinen API-Schlüssel gibt; sei ein vernünftiger Bürger und cache das Manifest lokal, anstatt es bei jeder Anfrage abzufragen.

    Fehlerbehandlung

    Unter Last kann der Endpunkt 503 mit einem Retry-After-Header zurückgeben (Sekunden, die gewartet werden sollen, bevor es erneut versucht wird). Respektiere ihn:

    import time, requests

    def get_with_retry(url):

    while True:

    resp = requests.get(url, timeout=30)

    if resp.status_code == 503:

    wait = int(resp.headers.get("Retry-After", "5"))

    time.sleep(wait)

    continue

    resp.raise_for_status()

    return resp.json()

    Jeder andere Nicht-200-Status ist es wert, protokolliert und gestoppt zu werden, anstatt blind erneut zu versuchen. Ein fehlerhafter after-Cursor sollte nicht passieren, wenn du nur next folgst, aber defensiver Code sollte nicht für immer davon ausgehen.

    Attribution

    Die Prompts in diesem Dataset stammen aus öffentlichen Beiträgen ihrer ursprünglichen Autoren. Wikiprompt ist der Aggregator, nicht der Rechteinhaber. Wenn du etwas mit diesen Daten baust, zitiere wikiprompt.org und, pro Datensatz, das original_source-Feld, das auf den ursprünglichen Beitrag verweist. Es gibt keine formale Lizenz darüber hinaus: Attribute die Site und attribute den Autor.

    Einen Versuch wert

    Drei Datensätze, um deinen Parser zu überprüfen, sobald du eine Seite gezogen hast: ein Data-Physicalization-Bildprompt, ein monumentales Schatten-Architekturfoto und ein Charakterdesign eines mysteriösen Nomaden. Alle drei funktionieren sauber durch content, media und metadata.

    Wenn ein Bulk-Export mehr ist, als du gerade brauchst, gibt es zwei leichtere Optionen: die Such-API für einzelne Abfragen und den MCP-Server, wenn du dies in einen Agenten statt in ein Skript einbindest. Beide sitzen auf demselben zugrunde liegenden Katalog wie /dataset, also ist hier nichts eine Sackgasse, wenn du klein anfängst und später in den Bulk-Export hineinwächst.

    Tags
    dataset·api·developer-guide·pagination·open-data·reference