Documentação técnica, API pública, importação em lote e como contribuir com o projeto.
Cole JSON ou faça upload de arquivo .json
Campos aceitos: title/titulo/nome, content/conteudo/descricao/texto, categoryId/categoryName/categoria, estado/uf, municipio/cidade, bairro, tags/hashtags, authorNickname/autor
Formatos aceitos: { "posts": [...] }, array direto [...], { "data": [...] }, { "items": [...] }, ou objeto único
React 19 + TypeScript + Tailwind CSS 4
Express 4 + tRPC 11 + Node.js
MySQL/TiDB + Drizzle ORM
S3 para upload de imagens
Opcional - OAuth para admin
Licença MIT - use como quiser
A Zueira Pública oferece uma API REST pública para que desenvolvedores possam integrar, automatizar e alimentar o banco de dados programaticamente. Não é necessário autenticação.
| Método | Endpoint | Descrição |
|---|---|---|
| GET | /api/v1/posts | Listar posts (filtros: categoryId, estado, municipio, bairro, search, tagSlug, limit, offset, orderBy) |
| GET | /api/v1/posts/:id | Obter post por ID com tags |
| POST | /api/v1/posts | Criar um post |
| POST | /api/v1/posts/batch | Criar posts em lote (máx 10 por requisição via REST, 50 via tRPC) |
| GET | /api/v1/categories | Listar todas as categorias com subcategorias |
| GET | /api/v1/tags/popular | Tags mais populares |
| GET | /api/v1/schema | JSON Schema para importação em lote |
30
Requisições por minuto
50
Posts por batch (tRPC)
100
Posts por listagem
Headers de resposta: X-RateLimit-Limit, X-RateLimit-Remaining, Retry-After (em caso de 429).
{
"posts": [
{
"title": "string (3-500 chars, obrigatório)",
"content": "string (min 10 chars, obrigatório)",
"categoryId": "number (ID da categoria)",
"categoryName": "string (nome da categoria - alternativa ao ID)",
"categorySlug": "string (slug da categoria - alternativa ao ID)",
"authorNickname": "string (max 100, default: 'Anônimo')",
"estado": "string (2 chars, ex: 'RJ', 'SP')",
"municipio": "string (max 255)",
"bairro": "string (max 255)",
"tags": ["string (max 50 chars)", "máx 10 tags"]
}
]
}// POST https://zueirapub-nfstcgfg.manus.space/api/v1/posts
fetch("https://zueirapub-nfstcgfg.manus.space/api/v1/posts", {
method: "POST",
headers: { "Content-Type": "application/json" },
body: JSON.stringify({
title: "Bar do Zé - Melhor chopp da Lapa",
content: "O Bar do Zé na Lapa tem o melhor chopp gelado do Rio. Preço honesto e ambiente top.",
categoryId: 1,
authorNickname: "Carioca Raiz",
estado: "RJ",
municipio: "Rio de Janeiro",
bairro: "Lapa",
tags: ["bar", "chopp", "lapa"]
})
})// POST https://zueirapub-nfstcgfg.manus.space/api/v1/posts/batch
fetch("https://zueirapub-nfstcgfg.manus.space/api/v1/posts/batch", {
method: "POST",
headers: { "Content-Type": "application/json" },
body: JSON.stringify({
posts: [
{
title: "Bar do Zé - Melhor chopp",
content: "Chopp gelado e preço honesto na Lapa.",
categoryId: 1,
estado: "RJ",
municipio: "Rio de Janeiro",
bairro: "Lapa",
tags: ["bar", "chopp"]
},
{
title: "Pizzaria do Mano",
content: "Pizza artesanal no Méier. Rodízio R$39,90.",
categoryId: 2,
estado: "RJ",
municipio: "Rio de Janeiro",
bairro: "Méier",
tags: ["pizza", "rodizio"]
}
]
})
})| Tabela | Descrição | Campos Principais |
|---|---|---|
| categories | Categorias hierárquicas | id, name, slug, icon, parentId |
| posts | Posts públicos | id, title, content, categoryId, estado, municipio, bairro, imageUrl, voteScore |
| comments | Comentários aninhados | id, postId, parentId, content, authorNickname |
| votes | Votos positivos/negativos | id, postId, value (+1/-1), fingerprint |
| ratings | Avaliações 1-5 estrelas | id, postId, value, fingerprint |
| tags | Hashtags de nicho | id, name, slug, usageCount |
| post_tags | Relação posts ↔ tags | id, postId, tagId |
| post_photos | Fotos colaborativas | id, postId, imageUrl, caption, authorNickname |
| reopen_votes | Votos de reabertura | id, postId, value, fingerprint |
| suggestions | Sugestões de melhorias | id, name, email, type, subject, message |