Blog›Guides

Um Guia do Desenvolvedor para o Endpoint /dataset do Wikiprompt

Uma explicação precisa, em estilo de referência, dos endpoints /dataset manifest e /dataset/prompts: formatos de resposta, cada campo, paginação por keyset, cache e tratamento de erros.

Um Guia do Desenvolvedor para o Endpoint /dataset do Wikiprompt

Um Guia do Desenvolvedor para o Endpoint /dataset do Wikiprompt

O Wikiprompt é um catálogo público e curado de prompts de IA, cobrindo ChatGPT, Claude, Gemini, GPT Image, Midjourney, Seedance, Veo, Kling, Nano Banana, Grok e mais. Em vez de raspar o site ao vivo para puxar esse catálogo programaticamente, agora existe uma exportação em massa dedicada: /dataset. Este post documenta isso da maneira que você gostaria que uma API de terceiros fosse documentada: formatos de resposta, semântica de campos, mecânica de paginação, cache e tratamento de erros, com exemplos executáveis.

Dois endpoints, um trabalho

Existem exatamente duas URLs que você precisa:

  • https://www.wikiprompt.org/dataset (manifesto)
  • https://www.wikiprompt.org/dataset/prompts (dados)
  • O manifesto é metadados sobre a exportação. O endpoint de dados é a própria exportação, paginada. Ambos retornam JSON simples, sem chave de API, sem cabeçalho de autenticação, nada para registrar.

    A resposta do manifesto

    Um GET no dataset manifesto retorna algo com este formato:

    {

    "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

    }

    }

    Trate total_prompts como uma contagem aproximada e ao vivo, não uma constante fixa. O catálogo cresce diariamente, então fixe sua integração em record_fields e no bloco pagination em vez de codificar a contagem em qualquer lugar do seu código.

    A resposta de dados

    Um GET em /dataset/prompts retorna uma página de registros mais um cursor para a próxima página:

    {

    "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": "o texto real do prompt vai aqui, 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"

    }

    Referência de campos

    Cada registro carrega os mesmos quatorze campos. Os que valem a pena destacar:

  • `slug` / `url`: slug é o identificador estável; url é a página canônica, útil se você quiser linkar de volta ou re-raspar um único registro depois.
  • `content`: o texto real do prompt. Este é o campo que a maioria das integrações se importa; todo o resto é metadados ao redor dele.
  • `category`: um de creative, marketing, personal, productivity, coding, education, business, research, other.
  • `media`: um array de URLs de imagem/vídeo quando o prompt produziu saída visual. Vazio para prompts somente texto.
  • `model`: o modelo de IA que o prompt alvo ou com o qual foi gerado, como uma string de texto livre ("Midjourney", "GPT-4o", "Veo", etc).
  • `metadata`: um objeto estruturado com media_type, aspect_ratio, style, e um bloco assessment que pontua dimensões de qualidade como criatividade e utilidade. Isso é null para prompts de texto simples que nunca carregaram avaliação de imagem/vídeo.
  • `original_source`: o link para o post original de onde o prompt veio. Veja a nota de atribuição abaixo, este campo importa se você reutilizar os dados downstream.
  • `created_at` / `updated_at`: timestamps ISO 8601. updated_at muda se um registro for editado ou re-enriquecido depois.
  • Mecânica de paginação

    O endpoint usa paginação por chave (keyset), não números de página. Dois parâmetros controlam isso:

  • limit: quantos registros por página, padrão 200, máximo 500.
  • after: um cursor opaco, ecoado de volta para você na URL next de cada resposta.
  • O contrato é simples: chame o endpoint, leia next, chame next verbatim, repita até next ser null. Não construa o valor after você mesmo; trate-o como um token opaco.

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

    Um rastreamento completo em Python parece assim:

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

    A 500 por página e 55.000+ registros, isso é aproximadamente 110 requisições para uma sincronização completa, ou muito menos para uma incremental se você adicionalmente filtrar no lado do cliente por updated_at.

    Cache e CORS

    Ambos os endpoints são armazenados em cache na borda, então requisições repetidas para a mesma página (mesmo valor after) são baratas e rápidas no nosso lado, e rápidas para você. Access-Control-Allow-Origin: * é definido em cada resposta, então você pode chamar isso diretamente do JavaScript do navegador com fetch(), sem necessidade de proxy. Não há limite de taxa vinculado a uma chave de API porque não há chave de API; seja um cidadão razoável e armazene o manifesto localmente em vez de consultá-lo a cada requisição.

    Tratamento de erros

    Sob carga, o endpoint pode retornar 503 com um cabeçalho Retry-After (segundos para esperar antes de tentar novamente). Respeite isso:

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

    Qualquer outro não-200 vale a pena registrar e parar em vez de tentar novamente cegamente, um cursor after malformado não deve acontecer se você só está seguindo next, mas código defensivo não deve assumir isso para sempre.

    Atribuição

    Os prompts neste dataset são agregados de posts públicos de seus autores originais. O Wikiprompt é o agregador, não o detentor dos direitos. Se você construir algo com esses dados, cite wikiprompt.org e, por registro, o campo original_source apontando de volta para o post original. Não há licença formal anexada além disso: atribua o site e atribua o autor.

    Vale a pena tentar

    Três registros para verificar seu parser depois de puxar uma página: um prompt de imagem de data physicalization, uma foto arquitetônica de sombra monumental, e um design de personagem viajante nômade. Todos os três fazem round-trip limpo através de content, media, e metadata.

    Se uma exportação em massa é mais do que você precisa, agora, duas opções mais leves existem: a API de busca para consultas únicas, e o servidor MCP se você está conectando isso a um agente em vez de um script. Ambos ficam em cima do mesmo catálogo subjacente que /dataset, então nada aqui é um beco sem saída se você começar menor e crescer para a exportação em massa depois.

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