API REST + Webhooks
Automatize geração, aprovação e integre PostaGen com seu CRM, pipeline de conteúdo ou workflow customizado.
Quickstart
Gere o primeiro post via API em 30 segundos:
curl -X POST https://postagen.ia.br/api/v1/generate \
-H "Authorization: Bearer pg_SEU_TOKEN" \
-H "Content-Type: application/json" \
-d '{
"plataforma": "instagram",
"tipo": "post_legenda",
"tom": "profissional",
"nicho": "dentista",
"tema": "Clareamento dental"
}'Autenticação
Todas as requisições exigem header Authorization: Bearer pg_SEU_TOKEN.
Gere uma chave no dashboard: /api. A key plaintext é mostrada uma única vez na criação — guarde em lugar seguro.
Endpoints
/v1/generateGera conteúdo para redes sociais
Body
{
"plataforma": "instagram" | "tiktok" | "whatsapp",
"tipo": "post_legenda" | "carrossel" | "stories" | "reels_roteiro" | "hashtags",
"tom": "profissional" | "descontraido" | "educativo" | "persuasivo" | "inspiracional" | "humoristico",
"nicho": "dentista" | "personal_trainer" | "nutricionista" | ...,
"tema": "Texto livre (opcional, max 500 chars)",
"workspace_id": "uuid (opcional)"
}Response
{
"data": {
"id": "uuid",
"conteudo": "texto gerado...",
"hashtags": ["dica", "saude"],
"call_to_action": "Agende sua consulta..."
},
"usage": { "input_tokens": 450, "output_tokens": 320 }
}/v1/workspacesLista workspaces do user
Response
{
"data": [
{
"id": "uuid",
"client_name": "Clínica Dr. Silva",
"nicho": "dentista",
"tone": "profissional",
"is_default": true
}
]
}/v1/workspacesCria novo workspace
Body
{
"client_name": "Nome do cliente",
"nicho": "dentista",
"tone": "profissional",
"brand_voice": "Descrição opcional",
"keywords": ["clareamento", "invisalign"]
}/v1/contents?workspace_id=uuid&plataforma=instagram&limit=50Lista posts gerados (filtros opcionais: workspace_id, plataforma, tipo, limit)
/v1/approvalsCria link de aprovação pública para um post
Body
{
"content_id": "uuid",
"client_email": "cliente@exemplo.com (opcional, envia email)"
}Response
{
"data": {
"id": "uuid",
"link": "https://postagen.ia.br/aprovar/abc123...",
"token": "abc123..."
}
}Webhooks
Configure URLs no dashboard para receber notificações em tempo real de eventos comocontent.created eapproval.approved.
Payload
PostaGen envia POST com body JSON:
{
"event": "content.created",
"timestamp": "2026-04-22T14:30:00.000Z",
"workspace_id": "uuid-or-null",
"data": {
"id": "post-uuid",
"tipo": "post_legenda",
"plataforma": "instagram",
"conteudo": "...",
"hashtags": [...]
}
}Headers enviados
X-PostaGen-Event: content.created
X-PostaGen-Signature: a1b2c3... (HMAC-SHA256 do raw body)
X-PostaGen-Timestamp: 1718467800
Content-Type: application/json
User-Agent: PostaGen-Webhooks/1.0Validar signature (Node.js)
import crypto from "node:crypto";
function verifySignature(rawBody, signature, secret) {
const expected = crypto
.createHmac("sha256", secret)
.update(rawBody)
.digest("hex");
return crypto.timingSafeEqual(
Buffer.from(expected),
Buffer.from(signature)
);
}
// No seu handler:
const signature = req.headers["x-postagen-signature"];
if (!verifySignature(rawBody, signature, YOUR_SECRET)) {
return res.status(401).send("Invalid signature");
}Validar signature (Python)
import hmac
import hashlib
def verify_signature(raw_body: bytes, signature: str, secret: str) -> bool:
expected = hmac.new(
secret.encode(),
raw_body,
hashlib.sha256
).hexdigest()
return hmac.compare_digest(expected, signature)Eventos disponíveis
content.created— post geradoapproval.requested— envio para aprovaçãoapproval.approved— cliente aprovouapproval.changes_requested— cliente pediu ajustesapproval.rejected— cliente rejeitousubscription.upgraded— plano atualizadosubscription.cancelled— plano cancelado
Retry policy
3 tentativas com backoff: imediato, +1s, +5s. Timeout de 10s por request. Após 20 falhas consecutivas o webhook é automaticamente desativado.
Rate limits
- • Plano Scale: 2.000 requests de geração por mês, 10 requests por segundo em leituras
- • Rate limit excedido retorna HTTP 429 com header
Retry-After
Códigos de erro
400Parâmetros inválidos401API key inválida, ausente ou revogada403Plano não permite acesso à API (upgrade para Scale)404Recurso não encontrado429Limite mensal atingido ou rate limit500Erro interno