MIGRAÇÃO / V0 → V1

Contents unified (V1.0)

A API V1.0 (PRD-006) unifica drafts + contents num único recurso. Status enum cobre todo o ciclo de vida. SDK v2.0.0 publica a nova surface. Drafts deixou de existir.


Breaking changes

Esta migração é big bang — não há janela de transição com aliases. /v1/workspaces/{wsId}/drafts retorna 404. Use /v1/workspaces/{wsId}/contents com status: 'draft'.

O que mudou

  1. Recurso unificado. Os 2 recursos antigos — drafts e contents — viraram um só (contents) com status enum.
  2. Status enum estendido. Era 9 valores, agora são 11. Novos: draft e stored (pre-publicação).
  3. Default em POST mudou. Antes, criar content sem schedule_at dispatchava publish imediato (status queued). Agora default é draft — pra publish direto, passe status: 'queued'.
  4. Snapshot público. Todo content ganha um public_token estável. outposted.one/p/{token} renderiza SSR quando public_status='shareable'.
  5. Webhooks enriquecidos. content.published e content.partial agora carregam public_url no top-level.
  6. SDK v2.0.0. Major bump. client.drafts.* removido; use client.contents.*.

Mapping SDK V0 → V1

Antes (V0)Agora (V1 — SDK v2.0.0)
client.drafts.create({ title, content_json })client.contents.create(wsId, { brand_id, content_type, target_platforms, content, status: 'draft' })
client.drafts.update(id, patch)client.contents.patch(wsId, id, patch)
client.drafts.delete(id)client.contents.delete(wsId, id)
client.drafts.publish(id)client.contents.publish(wsId, id)
client.drafts.list({ brand_id })client.contents.list(wsId, { status: 'draft', brand_id })
(criar e publicar direto — default V0)client.contents.create(wsId, { ..., status: 'queued' })

Endpoints novos

PRD-006 adiciona endpoints dedicados pra cada transição. Cada um valida estado atual + atomic-claim no DB. Tentativa inválida retorna 422 invalid_transition.

  • POST /contents/{id}/publish — força publish imediato
  • POST /contents/{id}/schedule — agenda
  • POST /contents/{id}/cancel — alias semântico do DELETE (preserva o row)
  • POST /contents/{id}/reactivate — cancelled → draft|stored
  • POST /contents/{id}/retry — failed (tudo) / partial (só failed jobs)
  • POST /contents/{id}/move-to-draft / /move-to-stored — pre-publish flips
  • POST /contents/{id}/clone — duplica como novo draft (use case canônico: edit pós-publish)
  • POST /contents/{id}/snapshot/share / /unshare / /revoke
  • GET /contents/{id}/snapshot — payload completo Diamond OS

Quem é afetado

  • Quem usa o SDK Node.js: bump pra @outposted/node@^2.0.0. Substitua client.drafts.* conforme tabela acima. Veja CHANGELOG no npm pra detalhes.
  • Quem usa HTTP direto (ChatGPT Action, n8n, curl): substitua /v1/workspaces/{wsId}/drafts/* por /v1/workspaces/{wsId}/contents/* com status apropriado.
  • Quem usa MCP server: tools novos pra rascunho/estoque (create_content_draft, store_content) e snapshot. O tool publish_content agora força status: queued internamente — semantica preservada.
  • Quem recebe webhooks: nada quebra; só ganha o campo novo public_url no payload de content.published e content.partial.

Próximos passos

Nesta página