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
- Recurso unificado. Os 2 recursos antigos —
draftsecontents— viraram um só (contents) comstatusenum. - Status enum estendido. Era 9 valores, agora são 11. Novos:
draftestored(pre-publicação). - Default em POST mudou. Antes, criar content sem
schedule_atdispatchava publish imediato (statusqueued). Agora default édraft— pra publish direto, passestatus: 'queued'. - Snapshot público. Todo content ganha um
public_tokenestável.outposted.one/p/{token}renderiza SSR quandopublic_status='shareable'. - Webhooks enriquecidos.
content.publishedecontent.partialagora carregampublic_urlno top-level. - SDK v2.0.0. Major bump.
client.drafts.*removido; useclient.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 imediatoPOST /contents/{id}/schedule— agendaPOST /contents/{id}/cancel— alias semântico do DELETE (preserva o row)POST /contents/{id}/reactivate— cancelled → draft|storedPOST /contents/{id}/retry— failed (tudo) / partial (só failed jobs)POST /contents/{id}/move-to-draft//move-to-stored— pre-publish flipsPOST /contents/{id}/clone— duplica como novo draft (use case canônico: edit pós-publish)POST /contents/{id}/snapshot/share//unshare//revokeGET /contents/{id}/snapshot— payload completo Diamond OS
Quem é afetado
- Quem usa o SDK Node.js: bump pra
@outposted/node@^2.0.0. Substituaclient.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/*comstatusapropriado. - Quem usa MCP server: tools novos pra rascunho/estoque (
create_content_draft,store_content) e snapshot. O toolpublish_contentagora forçastatus: queuedinternamente — semantica preservada. - Quem recebe webhooks: nada quebra; só ganha o campo novo
public_urlno payload decontent.publishedecontent.partial.