Pular para o conteúdo principal
Documentação

API REST + Webhooks

Automatize geração, aprovação e integre PostaGen com seu CRM, pipeline de conteúdo ou workflow customizado.

Disponível no plano Scale (R$ 897/mês)

Quickstart

Gere o primeiro post via API em 30 segundos:

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

Importante: Nunca exponha sua API key em código frontend. Use apenas em servidor backend ou serviços protegidos.

Endpoints

POST/v1/generate

Gera conteúdo para redes sociais

Body

json
{
  "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

json
{
  "data": {
    "id": "uuid",
    "conteudo": "texto gerado...",
    "hashtags": ["dica", "saude"],
    "call_to_action": "Agende sua consulta..."
  },
  "usage": { "input_tokens": 450, "output_tokens": 320 }
}
GET/v1/workspaces

Lista workspaces do user

Response

json
{
  "data": [
    {
      "id": "uuid",
      "client_name": "Clínica Dr. Silva",
      "nicho": "dentista",
      "tone": "profissional",
      "is_default": true
    }
  ]
}
POST/v1/workspaces

Cria novo workspace

Body

json
{
  "client_name": "Nome do cliente",
  "nicho": "dentista",
  "tone": "profissional",
  "brand_voice": "Descrição opcional",
  "keywords": ["clareamento", "invisalign"]
}
GET/v1/contents?workspace_id=uuid&plataforma=instagram&limit=50

Lista posts gerados (filtros opcionais: workspace_id, plataforma, tipo, limit)

POST/v1/approvals

Cria link de aprovação pública para um post

Body

json
{
  "content_id": "uuid",
  "client_email": "cliente@exemplo.com (opcional, envia email)"
}

Response

json
{
  "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:

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

http
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.0

Validar signature (Node.js)

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

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 gerado
  • approval.requested — envio para aprovação
  • approval.approved — cliente aprovou
  • approval.changes_requested — cliente pediu ajustes
  • approval.rejected — cliente rejeitou
  • subscription.upgraded — plano atualizado
  • subscription.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álidos
401API key inválida, ausente ou revogada
403Plano não permite acesso à API (upgrade para Scale)
404Recurso não encontrado
429Limite mensal atingido ou rate limit
500Erro interno

Pronto para integrar?

Crie sua API key no dashboard e comece a automatizar em minutos.