Skip to content

Instâncias & Setup ​

Uma instância de Helpdesk é a central de atendimento da sua empresa dentro da plataforma: tickets, clientes, agentes, categorias e políticas de SLA vivem dentro dela. Antes de usar qualquer endpoint do Helpdesk (/v1/helpdesk/...), você precisa provisionar uma instância — e é isso que estes endpoints fazem.

A criação é mais do que um simples INSERT: em uma única transação, a plataforma cria a categoria padrão Geral, as 4 políticas de SLA padrão e o primeiro agente com papel de admin, devolvendo as credenciais de acesso e o tokenHeader que identifica a instância em todas as chamadas seguintes.

Headers obrigatórios

Estes endpoints pertencem à área do dono da conta na plataforma. Todas as requisições exigem Authorization: Bearer {token} (autenticação da plataforma, guard user) e o parâmetro de query workspaceId com o ID do projeto. O header X-Helpdesk-Id não é usado aqui — ele é o tokenHeader gerado na criação da instância. Limite de 100 requisições por minuto (429 ao exceder).


Estrutura de Dados Principal ​

Uma instância de Helpdesk contém as seguintes informações principais:

CampoTipoDescrição
nameStringNome da instância (máx. 150 caracteres).
slugStringSlug gerado automaticamente a partir do nome.
tokenHeaderStringUUID que identifica a instância — usado como X-Helpdesk-Id nas APIs /v1/helpdesk/**.
timezoneStringFuso horário da instância (padrão: UTC) — usado no cálculo de SLA em horário comercial.
localeStringLocale padrão (padrão: pt_BR).
ticketPrefixStringPrefixo da numeração dos tickets (máx. 10 caracteres, padrão: TCK).
lastTicketNumberNumberContador sequencial de tickets da instância.
isAutoReopenSolvedBooleanResposta do cliente reabre ticket solved (padrão: true).
isAutoPendingOnAgentReplyBooleanResposta pública do agente move ticket open para pending (padrão: true).
autoCloseAfterDaysNumberDias para fechar tickets solved automaticamente (nulo = nunca).
settingsObjectConfigurações livres da instância (JSONB) — ver abaixo.
isActiveBooleanIndica se a instância está ativa.
workspaceStorageIdNumberProvedor de armazenamento do projeto (nulo se não vinculado).
workspaceMailIdNumberProvedor de e-mail do projeto (nulo se não vinculado).

Configurações (settings) ​

O objeto settings é livre, mas duas chaves têm comportamento nativo:

ChaveFormatoEfeito
businessHours{ weekDays: number[], start: 'HH:mm', end: 'HH:mm' }Janela de horário comercial usada por políticas de SLA com isBusinessHoursOnly. weekDays usa 0 = domingo até 6 = sábado.
autoAssignbooleanQuando true, tickets criados sem agente são distribuídos automaticamente (round-robin).
json
{
  "businessHours": { "weekDays": [1, 2, 3, 4, 5], "start": "09:00", "end": "18:00" },
  "autoAssign": true
}

Validação do businessHours

A configuração só é aplicada se for válida: start/end no formato HH:mm com start < end e ao menos um dia da semana entre 0 e 6. Caso contrário, o SLA cai no cálculo em tempo corrido.

Gatilhos Automáticos ​

GatilhoCampoComportamento
Auto-reopenisAutoReopenSolvedCliente responde um ticket solved → status volta para open, solvedAt é zerado e reopenedCount incrementa.
Auto-pendingisAutoPendingOnAgentReplyAgente envia resposta pública em ticket open → status muda para pending.
Auto-closeautoCloseAfterDaysO comando helpdesk:auto-close fecha (closed) tickets solved há mais dias que o configurado.

Auto-close via comando Ace

O fechamento automático não é um agendador interno: rode node ace helpdesk:auto-close (idealmente em cron) para processar todas as instâncias ativas com autoCloseAfterDays configurado. Cada fechamento gera um evento de sistema na timeline do ticket.


Setup Inicial ​

O POST /user/helpdesks executa todo o provisionamento em uma única transação — se qualquer etapa falhar, nada é persistido:

  1. Categoria default: chamada Geral (slug: geral), ativa.

  2. 4 políticas de SLA padrão: uma por prioridade, todas em tempo corrido (isBusinessHoursOnly: false):

    PrioridadeNomePrimeira respostaResolução
    lowBaixa1440 min (24h)4320 min (72h)
    normalNormal480 min (8h)1440 min (24h)
    highAlta120 min (2h)480 min (8h)
    urgentUrgente15 min240 min (4h)
  3. Primeiro agente: criado com o nome e e-mail do usuário autenticado na plataforma, papel admin, disponível para round-robin e vinculado à categoria Geral.

  4. Resposta 201: inclui email, password (senha temporária, exibida uma única vez) e tokenHeader.

Guarde a senha temporária e o tokenHeader imediatamente — eles não podem ser recuperados depois (o token pode ser regerado, a senha não).


Endpoints ​

Listar Instâncias ​

Lista as instâncias de Helpdesk do projeto, com paginação e busca por nome.

http
GET /user/helpdesks

Parâmetros de Query ​

NomeTipoObrigatórioDescrição
workspaceIdnumberSimID do projeto (workspace) ao qual a instância pertence.
pagenumberNãoO número da página (mínimo: 1).
perPagenumberNãoItens por página (entre 1 e 100, padrão: 25).
searchstringNãoBusca por termo no nome da instância (máx. 150 caracteres).

Exemplo de Requisição ​

bash
curl -X GET "https://api.us.basis.tavares.in/user/helpdesks?workspaceId=1&page=1&perPage=25" \
  -H "Authorization: Bearer {token}" \
  -H "Accept: application/json"

Respostas ​

200 OK

Retorna um objeto de paginação contendo a lista de instâncias.

json
{
  "meta": {
    "currentPage": 1,
    "perPage": 25
  },
  "data": [
    {
      "id": "1",
      "name": "Suporte Acme",
      "slug": "suporte-acme",
      "tokenHeader": "3fa85f64-5717-4562-b3fc-2c963f66afa6",
      "ticketPrefix": "TCK",
      "isActive": true,
      "createdAt": "2026-09-01T10:05:33.000+00:00",
      "updatedAt": "2026-09-01T10:05:33.000+00:00"
    }
  ]
}

403 Forbidden

Ocorre quando o workspaceId não é informado ou o projeto pertence a outro usuário.

json
{
  "notice": "O projeto precisa ser informado",
  "field": "workspaceId"
}

Criar Instância ​

Provisiona uma nova instância de Helpdesk, executando o setup inicial completo em transação.

http
POST /user/helpdesks

Payload (Body) ​

AtributoTipoObrigatórioDescrição
helpdesk.namestringSimNome da instância (máx. 150 caracteres).
helpdesk.workspaceStorageIdnumberNãoID do provedor de armazenamento do projeto (deve existir e estar ativo); necessário para uploads de arquivos.
helpdesk.workspaceMailIdnumberNãoID do provedor de e-mail do projeto (deve existir e estar ativo).
helpdesk.timezonestringNãoFuso horário (máx. 64 caracteres, padrão: UTC).
helpdesk.localestringNãoLocale padrão (máx. 10 caracteres, padrão: pt_BR).
helpdesk.ticketPrefixstringNãoPrefixo da numeração de tickets (máx. 10 caracteres, padrão: TCK).
helpdesk.isAutoReopenSolvedbooleanNãoReabre ticket solved quando o cliente responde (padrão: true).
helpdesk.isAutoPendingOnAgentReplybooleanNãoMove ticket open para pending quando o agente responde (padrão: true).
helpdesk.autoCloseAfterDaysnumberNãoDias para auto-close de tickets solved (mín. 1; null = nunca).
helpdesk.isActivebooleanNãoIndica se a instância já nasce ativa (padrão: true).
workspaceDomainsnumber[]SimIDs dos domínios do projeto vinculados à instância (pode ser um array vazio).

Exemplo de Requisição ​

bash
curl -X POST "https://api.us.basis.tavares.in/user/helpdesks?workspaceId=1" \
  -H "Authorization: Bearer {token}" \
  -H "Content-Type: application/json" \
  -d '{
    "helpdesk": {
      "name": "Suporte Acme",
      "workspaceStorageId": null,
      "workspaceMailId": null,
      "ticketPrefix": "SUP",
      "autoCloseAfterDays": 7
    },
    "workspaceDomains": [3]
  }'

Respostas ​

201 Created

Retorna as credenciais do primeiro agente (admin) e o token da instância. A senha temporária é exibida uma única vez.

json
{
  "email": "maria@acme.com",
  "password": "a1b2c3d4",
  "tokenHeader": "3fa85f64-5717-4562-b3fc-2c963f66afa6"
}

422 Unprocessable Entity

Erro de validação nos campos enviados.

json
{
  "errors": [
    {
      "message": "Nome é obrigatório",
      "rule": "required",
      "field": "helpdesk.name"
    }
  ]
}

Obter Instância por ID ​

Recupera os detalhes de uma instância, incluindo os domínios, o provedor de armazenamento e o provedor de e-mail vinculados.

http
GET /user/helpdesks/:id

Parâmetros de Rota ​

NomeTipoObrigatórioDescrição
idnumberSimO ID da instância.

Exemplo de Requisição ​

bash
curl -X GET "https://api.us.basis.tavares.in/user/helpdesks/1?workspaceId=1" \
  -H "Authorization: Bearer {token}" \
  -H "Accept: application/json"

Respostas ​

200 OK

Retorna a instância com workspaceDomains, workspaceStorage e workspaceMail.

json
{
  "id": "1",
  "workspaceId": "1",
  "workspaceMailId": null,
  "workspaceStorageId": null,
  "name": "Suporte Acme",
  "slug": "suporte-acme",
  "timezone": "UTC",
  "locale": "pt_BR",
  "ticketPrefix": "TCK",
  "lastTicketNumber": "0",
  "isAutoReopenSolved": true,
  "isAutoPendingOnAgentReply": true,
  "autoCloseAfterDays": 7,
  "settings": {},
  "tokenHeader": "3fa85f64-5717-4562-b3fc-2c963f66afa6",
  "isActive": true,
  "createdAt": "2026-09-01T10:05:33.000+00:00",
  "updatedAt": "2026-09-01T10:05:33.000+00:00",
  "deletedAt": null,
  "workspaceDomains": [
    {
      "id": "3",
      "uri": "suporte.acme.com"
    }
  ],
  "workspaceStorage": null,
  "workspaceMail": null
}

404 Not Found

Ocorre quando a instância não existe no projeto informado.

Atualizar Instância ​

Atualiza as configurações de uma instância e sincroniza os domínios vinculados. Usa o mesmo schema da criação: o objeto helpdesk (com name obrigatório) e o array workspaceDomains (que substitui os vínculos atuais).

http
PUT /user/helpdesks/:id

Exemplo de Requisição ​

bash
curl -X PUT "https://api.us.basis.tavares.in/user/helpdesks/1?workspaceId=1" \
  -H "Authorization: Bearer {token}" \
  -H "Content-Type: application/json" \
  -d '{
    "helpdesk": {
      "name": "Suporte Acme",
      "isAutoReopenSolved": false,
      "autoCloseAfterDays": null
    },
    "workspaceDomains": [3]
  }'

Respostas ​

204 No Content

Atualização concluída com sucesso.

404 Not Found

Ocorre quando a instância não existe no projeto informado.

Remover Instância ​

Remove uma instância via soft delete — o registro deixa de aparecer em qualquer consulta, mas não é apagado fisicamente.

http
DELETE /user/helpdesks/:id

Exemplo de Requisição ​

bash
curl -X DELETE "https://api.us.basis.tavares.in/user/helpdesks/1?workspaceId=1" \
  -H "Authorization: Bearer {token}"

Respostas ​

204 No Content

Remoção concluída com sucesso.

404 Not Found

Ocorre quando a instância não existe no projeto informado.

Listar para Dropdown ​

Retorna as instâncias em formato simplificado (value/label), ideal para selects no frontend.

http
GET /user/helpdesks/list

Parâmetros de Query ​

NomeTipoObrigatórioDescrição
workspaceIdnumberSimID do projeto (workspace).
searchstringNãoBusca por termo no nome da instância (máx. 150 caracteres).

Exemplo de Requisição ​

bash
curl -X GET "https://api.us.basis.tavares.in/user/helpdesks/list?workspaceId=1" \
  -H "Authorization: Bearer {token}" \
  -H "Accept: application/json"

Respostas ​

200 OK

Retorna um array com as instâncias.

json
[
  {
    "value": 1,
    "label": "Suporte Acme"
  }
]

Regerar Token da Instância ​

Gera um novo tokenHeader (UUID) para a instância. O token anterior deixa de ser válido imediatamente — todas as integrações que usam o header X-Helpdesk-Id precisam ser atualizadas.

http
PATCH /user/helpdesks/:id/change-token

Exemplo de Requisição ​

bash
curl -X PATCH "https://api.us.basis.tavares.in/user/helpdesks/1/change-token?workspaceId=1" \
  -H "Authorization: Bearer {token}" \
  -H "Accept: application/json"

Respostas ​

200 OK

Retorna o novo token da instância.

json
{
  "tokenHeader": "9b2f7c1e-4d3a-4e5f-8a6b-1c2d3e4f5a6b"
}

404 Not Found

Ocorre quando a instância não existe no projeto informado.