Atendimento: Contato-Departamento

Endpoints da WebApiAlcance para gerenciar a associação N:N entre contatos e departamentos - a tabela de junção (contato_departamento) que vincula um contato a um departamento, opcionalmente amarrado a um cliente. Cobrem criação do vínculo, listagem com filtros e paginação, detalhamento por ID, atualização (apenas o vínculo de cliente) e exclusão.

Todos os endpoints exigem autenticação. Veja Autenticação para o fluxo de API Key. O Swagger oficial está em api.contabilidadealcance.com.br/docs.

Base path

/api/v1/contato-departamento

A URL completa em produção é https://api.contabilidadealcance.com.br/api/v1/contato-departamento.

Escopos necessários

  • contato_departamento:read - listagem e detalhamento
  • contato_departamento:write - criação, atualização e exclusão

O escopo é derivado da rota: o prefixo /contato-departamento vira o recurso contato_departamento (hífen → underscore), e o método HTTP define a ação (read para GET, write para POST/PUT/DELETE).

Endpoints

POST /contato-departamento/

Cria um novo vínculo entre um contato e um departamento, opcionalmente amarrado a um cliente.

Parâmetros

Este endpoint não recebe parâmetros de rota ou query - os dados vão no corpo da requisição (ContatoDepartamentoCreate): contato_id (obrigatório), departamento_id (obrigatório) e id_cliente (opcional).

Request

{
  "contato_id": 12,
  "departamento_id": 3,
  "id_cliente": 1234
}

Response 201 Created

{
  "success": true,
  "message": "Vínculo criado com sucesso",
  "data": {
    "id": 45,
    "contato_id": 12,
    "departamento_id": 3,
    "id_cliente": 1234,
    "data_hora_criacao": "2026-07-03T09:15:00-03:00"
  }
}

Dados inválidos retornam 422 Unprocessable Entity com detail descrevendo o erro.

Escopo: contato_departamento:write

GET /contato-departamento/

Lista os vínculos cadastrados, com filtros opcionais e paginação. Lista vazia é um estado válido - sempre retorna 200 OK, inclusive com data: [] e a mensagem "Nenhum vínculo encontrado.".

Parâmetros

ParâmetroTipoLocalObrigatórioDescrição
id_clienteintquerynãoFiltra por cliente (customer.id).
contato_idintquerynãoFiltra por contato.
departamento_idintquerynãoFiltra por departamento.
limitintquerynãoLimite de itens por página. Entre 1 e 500. Default 100.
offsetintquerynãoOffset de paginação. Mínimo 0. Default 0.

Request

Sem corpo de requisição.

Response 200 OK

{
  "success": true,
  "message": "Vínculos recuperados com sucesso",
  "data": [
    {
      "id": 45,
      "contato_id": 12,
      "departamento_id": 3,
      "id_cliente": 1234,
      "data_hora_criacao": "2026-07-03T09:15:00-03:00"
    }
  ]
}

Escopo: contato_departamento:read

GET /contato-departamento/{vinculo_id}

Detalha um vínculo pelo ID inteiro. Quando não encontrado, retorna 404 Not Found com detail descrevendo o erro.

Parâmetros

ParâmetroTipoLocalObrigatórioDescrição
vinculo_idintpathsimID interno do vínculo

Request

Sem corpo de requisição.

Response 200 OK

{
  "success": true,
  "message": "Vínculo recuperado com sucesso",
  "data": {
    "id": 45,
    "contato_id": 12,
    "departamento_id": 3,
    "id_cliente": 1234,
    "data_hora_criacao": "2026-07-03T09:15:00-03:00"
  }
}

Escopo: contato_departamento:read

PUT /contato-departamento/{vinculo_id}

Atualiza um vínculo existente. Por ser uma junção pura, somente o vínculo de cliente (id_cliente) é atualizável; contato_id e departamento_id são definidos apenas na criação.

Parâmetros

ParâmetroTipoLocalObrigatórioDescrição
vinculo_idintpathsimID do vínculo

Request (ContatoDepartamentoUpdate - apenas id_cliente, opcional)

{
  "id_cliente": 5678
}

Response 200 OK

{
  "success": true,
  "message": "Vínculo atualizado com sucesso",
  "data": {
    "id": 45,
    "contato_id": 12,
    "departamento_id": 3,
    "id_cliente": 5678,
    "data_hora_criacao": "2026-07-03T09:15:00-03:00"
  }
}

Vínculo não encontrado retorna 404 Not Found; demais erros de validação retornam 422 Unprocessable Entity.

Escopo: contato_departamento:write

DELETE /contato-departamento/{vinculo_id}

Remove um vínculo pelo ID. Quando não encontrado, retorna 404 Not Found.

Parâmetros

ParâmetroTipoLocalObrigatórioDescrição
vinculo_idintpathsimID do vínculo

Request

Sem corpo de requisição.

Response 200 OK

{
  "success": true,
  "message": "Vínculo removido com sucesso",
  "data": null
}

Escopo: contato_departamento:write

Schemas

ContatoDepartamentoCreate

CampoTipoObrigatórioObservações
contato_idintsimID do contato a ser vinculado.
departamento_idintsimID do departamento a ser vinculado.
id_clienteint | nullnãoCliente (customer.id) associado ao vínculo. Default null.

ContatoDepartamentoUpdate

Junção pura - apenas o vínculo de cliente é atualizável.

CampoTipoObservações
id_clienteint | nullReassocia (ou desassocia) o vínculo a um cliente.

ContatoDepartamentoRead

CampoTipoNotas
idintIdentificador do vínculo.
contato_idintContato vinculado.
departamento_idintDepartamento vinculado.
id_clienteint | nullCliente associado, quando houver.
data_hora_criacaodatetimeTimestamp de criação do vínculo.

Notas

  • Toda resposta segue o envelope { success, message, data } (ou { success: false, message, details } em erro).
  • GET /contato-departamento/ retorna 200 OK com data: [] e a mensagem "Nenhum vínculo encontrado." quando nenhum registro corresponde aos filtros - não é tratado como erro.
  • Os filtros id_cliente, contato_id e departamento_id são independentes e podem ser combinados na mesma consulta.
  • Como se trata de uma tabela de junção pura, PUT altera somente o id_cliente; contato_id e departamento_id são definidos apenas na criação.