PerpetuusPerpetuus Developers

Guia de Migração (Sunset Flat Routes)

Como atualizar suas integrações das rotas legadas flat para as rotas canônicas baseadas em Boards no Perpetuus.

Como parte da padronização e da otimização de segurança de multi-tenancy na Perpetuus API, todas as rotas de CRUD direto sem escopo de Board (rotas flat) foram descontinuadas ou removidas.


Por que migrar?

  • Segurança de Dados: As rotas aninhadas (ex: /boards/{boardId}/cards) garantem que o usuário e a API validem as permissões de acesso ao processo (Board) antes de ler ou escrever dados.
  • Campos Dinâmicos e Validação: O motor de validação de campos dinâmicos (fields) depende das definições de fase que pertencem a um Board. Rotas flat não suportam essa inteligência nativamente.
  • Desempenho: Consultas aninhadas reduzem o overhead de carregamento de registros órfãos ou de múltiplos boards simultaneamente.

Tabela de Substituição de Endpoints

Se você possui integrações antigas, substitua as chamadas conforme a convenção abaixo:

MétodoEndpoint Legado (Flat)Novo Endpoint Canônico (Nested)
GET/api/cardsGET /api/boards/{boardId}/cards
POST/api/cardsPOST /api/boards/{boardId}/cards
GET/api/cards/{id}GET /api/boards/{boardId}/cards/{id}
PUT/api/cards/{id}PUT /api/boards/{boardId}/cards/{id}
DELETE/api/cards/{id}DELETE /api/boards/{boardId}/cards/{id}
GET/api/phasesGET /api/boards/{boardId}/phases
GET/api/fieldsGET /api/boards/{boardId}/fields
GET/api/tagsGET /api/boards/{boardId}/tags

Descobrindo o boardId: O parâmetro {boardId} exigido na URL corresponde ao documentId (string) do quadro. Você pode descobri-lo listando seus quadros via GET /api/boards ou copiando diretamente da URL do aplicativo web (ex: app.perpetuus.com.br/boards/BOARD_ID).


Exemplo de Transição de Código (Criar Card)

Antes (Legado)

// POST /api/cards
const res = await fetch('https://api.perpetuus.com.br/api/cards', {
  method: 'POST',
  headers: {
    'Authorization': 'Bearer TOKEN',
    'Content-Type': 'application/json'
  },
  body: JSON.stringify({
    data: {
      title: 'Oportunidade Legada',
      board: 'board_document_id_123' // Enviava o board no corpo
    }
  })
});

Agora (Canônico e Seguro)

// POST /api/boards/board_document_id_123/cards
const res = await fetch('https://api.perpetuus.com.br/api/boards/board_document_id_123/cards', {
  method: 'POST',
  headers: {
    'Authorization': 'Bearer TOKEN',
    'x-tenant-id': 'minha-empresa', // Header tenant obrigatório
    'Content-Type': 'application/json'
  },
  body: JSON.stringify({
    data: {
      fields: {
        name: 'Oportunidade Nova (Inbound)' // Campos no objeto fields
      }
    }
  })
});

On this page