Skip to content

Pipelines & Etapas ​

Os pipelines representam os funis de recrutamento da sua instância do ATS. Cada pipeline é uma sequência ordenada de etapas — da inscrição do candidato até a contratação ou recusa — e as vagas são vinculadas a um pipeline para definir por qual funil suas candidaturas vão passar.

Você pode manter o pipeline padrão criado na ativação da instância ou montar funis personalizados para diferentes tipos de vaga. Ao criar um pipeline, ele já nasce com as 6 etapas padrão (New, Screening, Interview, Offer, Hired, Rejected), prontas para uso — e você pode renomeá-las, adicionar novas etapas e reordená-las livremente.

Headers obrigatórios

Todas as requisições devem incluir o header X-Ats-Id (UUID) com o identificador da instância (tokenHeader) e Authorization: Bearer {token} com o token do staff (guard atsUser). As operações de escrita (criar, atualizar, reordenar e remover) exigem perfil de administrador (owner ou admin); demais perfis recebem 403 Forbidden.


Estrutura de Dados Principal ​

Um pipeline contém as seguintes informações:

CampoTipoDescrição
nameStringNome do pipeline (máx. 160 caracteres).
isDefaultBooleanIndica se é o pipeline padrão da instância.
isEnforceSequentialBooleanQuando true, impede que candidaturas pulem etapas no funil.
atsStagesArrayEtapas do pipeline, ordenadas por position (no detalhe e na listagem).

Cada etapa contém:

CampoTipoDescrição
nameStringNome da etapa (máx. 150 caracteres).
slugStringSlug gerado automaticamente a partir do nome.
typeEnumTipo da etapa: applied, screening, assessment, interview, offer, hired ou rejected.
positionNumberPosição da etapa no funil (a partir de 1).
isTerminalBooleanDerivado automaticamente: true para etapas do tipo hired e rejected.

Regras do funil

  • O primeiro pipeline criado na instância é sempre o padrão (isDefault: true). Ao marcar outro pipeline como padrão, o anterior é desmarcado automaticamente — existe sempre um único pipeline default.
  • Cada pipeline pode ter apenas uma etapa do tipo applied (a etapa de entrada das candidaturas). Tentativas de criar ou promover uma segunda etapa applied falham com 422 APPLIED_STAGE_EXISTS.
  • A etapa applied não pode ser removida (422 APPLIED_STAGE_LOCKED), e nenhuma etapa pode ser removida enquanto houver candidaturas vinculadas a ela (422 STAGE_IN_USE).

Pipelines ​

Listar Pipelines ​

Lista os pipelines da instância com paginação, incluindo as etapas de cada um em atsStages (ordenadas por position).

http
GET /v1/ats/user/pipelines

Parâmetros de Query ​

NomeTipoObrigatórioDescrição
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 (máx. 150 caracteres).
orderByenumNãoOrdena por id, name ou createdAt.
orderDirectionenumNãoDireção da ordenação: asc ou desc.

Exemplo de Requisição ​

bash
curl -X GET "https://api.us.basis.tavares.in/v1/ats/user/pipelines?page=1&perPage=25" \
  -H "X-Ats-Id: 3fa85f64-5717-4562-b3fc-2c963f66afa6" \
  -H "Authorization: Bearer {token}" \
  -H "Accept: application/json"

Respostas ​

200 OK

Retorna um objeto de paginação contendo os pipelines e suas etapas.

json
{
  "meta": {
    "currentPage": 1,
    "perPage": 25
  },
  "data": [
    {
      "id": 1,
      "atsId": 1,
      "name": "Default",
      "isDefault": true,
      "isEnforceSequential": false,
      "createdAt": "2026-09-10T02:10:58.799+00:00",
      "updatedAt": "2026-09-10T02:10:58.799+00:00",
      "atsStages": [
        {
          "id": 1,
          "atsPipelineId": 1,
          "name": "New",
          "slug": "new",
          "type": "applied",
          "position": 1,
          "isTerminal": false
        },
        {
          "id": 2,
          "atsPipelineId": 1,
          "name": "Screening",
          "slug": "screening",
          "type": "screening",
          "position": 2,
          "isTerminal": false
        },
        {
          "id": 3,
          "atsPipelineId": 1,
          "name": "Interview",
          "slug": "interview",
          "type": "interview",
          "position": 3,
          "isTerminal": false
        },
        {
          "id": 4,
          "atsPipelineId": 1,
          "name": "Offer",
          "slug": "offer",
          "type": "offer",
          "position": 4,
          "isTerminal": false
        },
        {
          "id": 5,
          "atsPipelineId": 1,
          "name": "Hired",
          "slug": "hired",
          "type": "hired",
          "position": 5,
          "isTerminal": true
        },
        {
          "id": 6,
          "atsPipelineId": 1,
          "name": "Rejected",
          "slug": "rejected",
          "type": "rejected",
          "position": 6,
          "isTerminal": true
        }
      ]
    }
  ]
}

Listar Pipelines (Lista Simples) ​

Retorna os pipelines em formato simplificado (value/label), ideal para selects e filtros no frontend.

http
GET /v1/ats/user/pipelines/list

Parâmetros de Query ​

NomeTipoObrigatórioDescrição
searchstringNãoBusca por termo no início do nome (máx. 150 caracteres).

Exemplo de Requisição ​

bash
curl -X GET "https://api.us.basis.tavares.in/v1/ats/user/pipelines/list" \
  -H "X-Ats-Id: 3fa85f64-5717-4562-b3fc-2c963f66afa6" \
  -H "Authorization: Bearer {token}" \
  -H "Accept: application/json"

Respostas ​

200 OK

Retorna um array com os pipelines em formato value/label.

json
[
  {
    "value": 1,
    "label": "Default"
  }
]

Criar Pipeline ​

Cria um novo pipeline já com as 6 etapas padrão (New, Screening, Interview, Offer, Hired, Rejected). Se for o primeiro pipeline da instância, ele se torna o padrão automaticamente.

http
POST /v1/ats/user/pipelines

Payload (Body) ​

AtributoTipoObrigatórioDescrição
namestringSimNome do pipeline (máx. 160 caracteres).
isDefaultbooleanNãoDefine o pipeline como padrão da instância (desmarca o padrão atual).
isEnforceSequentialbooleanNãoQuando true, impede que candidaturas pulem etapas (padrão: false).

Exemplo de Requisição ​

bash
curl -X POST "https://api.us.basis.tavares.in/v1/ats/user/pipelines" \
  -H "X-Ats-Id: 3fa85f64-5717-4562-b3fc-2c963f66afa6" \
  -H "Authorization: Bearer {token}" \
  -H "Content-Type: application/json" \
  -d '{
    "name": "Engineering Avaliation",
    "isDefault": false,
    "isEnforceSequential": true
  }'

Respostas ​

201 Created

Retorna o ID do pipeline criado.

json
{
  "id": 2
}

422 Unprocessable Entity

Erro de validação nos campos enviados.

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

403 Forbidden

Ocorre quando o usuário autenticado não possui perfil de administrador (owner ou admin).

Obter Pipeline por ID ​

Recupera os detalhes de um pipeline, incluindo suas etapas ordenadas por position.

http
GET /v1/ats/user/pipelines/:id

Parâmetros de Rota ​

NomeTipoObrigatórioDescrição
idnumberSimO ID do pipeline.

Exemplo de Requisição ​

bash
curl -X GET "https://api.us.basis.tavares.in/v1/ats/user/pipelines/1" \
  -H "X-Ats-Id: 3fa85f64-5717-4562-b3fc-2c963f66afa6" \
  -H "Authorization: Bearer {token}" \
  -H "Accept: application/json"

Respostas ​

200 OK

Retorna o pipeline com suas etapas em atsStages.

json
{
  "id": 1,
  "atsId": 1,
  "name": "Default",
  "isDefault": true,
  "isEnforceSequential": false,
  "createdAt": "2026-09-10T02:10:58.799+00:00",
  "updatedAt": "2026-09-10T02:10:58.799+00:00",
  "atsStages": [
    {
      "id": 1,
      "atsPipelineId": 1,
      "name": "New",
      "slug": "new",
      "type": "applied",
      "position": 1,
      "isTerminal": false
    },
    {
      "id": 5,
      "atsPipelineId": 1,
      "name": "Hired",
      "slug": "hired",
      "type": "hired",
      "position": 5,
      "isTerminal": true
    }
  ]
}

404 Not Found

Ocorre quando o pipeline não existe na instância.

Atualizar Pipeline ​

Atualiza os dados de um pipeline existente.

http
PUT /v1/ats/user/pipelines/:id

Payload (Body) ​

AtributoTipoObrigatórioDescrição
namestringSimNome do pipeline (máx. 160 caracteres).
isDefaultbooleanNãoDefine o pipeline como padrão da instância.
isEnforceSequentialbooleanNãoHabilita ou desabilita a progressão sequencial no funil.

Exemplo de Requisição ​

bash
curl -X PUT "https://api.us.basis.tavares.in/v1/ats/user/pipelines/2" \
  -H "X-Ats-Id: 3fa85f64-5717-4562-b3fc-2c963f66afa6" \
  -H "Authorization: Bearer {token}" \
  -H "Content-Type: application/json" \
  -d '{
    "name": "Engineering Avaliation",
    "isDefault": false,
    "isEnforceSequential": true
  }'

Respostas ​

204 No Content

Atualização concluída com sucesso.

422 Unprocessable Entity

Erro de validação nos campos enviados.

Definir Pipeline como Padrão ​

Marca um pipeline como o padrão da instância, desmarcando o pipeline padrão anterior. Existe sempre um único pipeline default por instância.

http
PATCH /v1/ats/user/pipelines/:id/default

Parâmetros de Rota ​

NomeTipoObrigatórioDescrição
idnumberSimO ID do pipeline que se tornará o padrão.

Exemplo de Requisição ​

bash
curl -X PATCH "https://api.us.basis.tavares.in/v1/ats/user/pipelines/2/default" \
  -H "X-Ats-Id: 3fa85f64-5717-4562-b3fc-2c963f66afa6" \
  -H "Authorization: Bearer {token}"

Respostas ​

204 No Content

Pipeline definido como padrão com sucesso.

Remover Pipeline ​

Exclui um pipeline da instância (exclusão lógica).

http
DELETE /v1/ats/user/pipelines/:id

Exemplo de Requisição ​

bash
curl -X DELETE "https://api.us.basis.tavares.in/v1/ats/user/pipelines/2" \
  -H "X-Ats-Id: 3fa85f64-5717-4562-b3fc-2c963f66afa6" \
  -H "Authorization: Bearer {token}"

Respostas ​

204 No Content

Remoção concluída com sucesso.


Etapas ​

As etapas definem o fluxo de um pipeline. Cada etapa possui um type que indica sua função no funil — as etapas do tipo hired e rejected são terminais (o sistema deriva isTerminal automaticamente), enquanto a etapa applied é a entrada obrigatória das candidaturas.

Listar Etapas ​

Lista as etapas de um pipeline, ordenadas por position (use orderDirection para inverter), com paginação e busca.

http
GET /v1/ats/user/pipelines/:pipelineId/stages

Parâmetros de Rota ​

NomeTipoObrigatórioDescrição
pipelineIdnumberSimO ID do pipeline.

Parâmetros de Query ​

NomeTipoObrigatórioDescrição
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 (máx. 150 caracteres).
orderDirectionenumNãoDireção da ordenação por position: asc (padrão) ou desc.

Exemplo de Requisição ​

bash
curl -X GET "https://api.us.basis.tavares.in/v1/ats/user/pipelines/1/stages" \
  -H "X-Ats-Id: 3fa85f64-5717-4562-b3fc-2c963f66afa6" \
  -H "Authorization: Bearer {token}" \
  -H "Accept: application/json"

Respostas ​

200 OK

Retorna um objeto de paginação contendo as etapas do pipeline.

json
{
  "meta": {
    "currentPage": 1,
    "perPage": 25
  },
  "data": [
    {
      "id": 1,
      "atsId": 1,
      "atsPipelineId": 1,
      "name": "New",
      "slug": "new",
      "type": "applied",
      "position": 1,
      "isTerminal": false,
      "createdAt": "2026-09-10T02:10:58.814+00:00",
      "updatedAt": "2026-09-10T02:10:58.814+00:00"
    },
    {
      "id": 2,
      "atsId": 1,
      "atsPipelineId": 1,
      "name": "Screening",
      "slug": "screening",
      "type": "screening",
      "position": 2,
      "isTerminal": false,
      "createdAt": "2026-09-10T02:10:58.840+00:00",
      "updatedAt": "2026-09-10T02:10:58.840+00:00"
    },
    {
      "id": 3,
      "atsId": 1,
      "atsPipelineId": 1,
      "name": "Interview",
      "slug": "interview",
      "type": "interview",
      "position": 3,
      "isTerminal": false,
      "createdAt": "2026-09-10T02:10:58.853+00:00",
      "updatedAt": "2026-09-10T02:10:58.853+00:00"
    }
  ]
}

422 Unprocessable Entity

Ocorre quando o pipelineId não pertence à instância.

Criar Etapa ​

Adiciona uma nova etapa ao pipeline. Se position for omitida, a etapa é criada na próxima posição disponível (ao final do funil).

http
POST /v1/ats/user/pipelines/:pipelineId/stages

Payload (Body) ​

AtributoTipoObrigatórioDescrição
namestringSimNome da etapa (máx. 150 caracteres). O slug é gerado automaticamente.
typeenumSimTipo da etapa: applied, screening, assessment, interview, offer, hired ou rejected.
positionnumberNãoPosição da etapa no funil (mínimo: 1). Omitida, assume a próxima posição disponível.

Exemplo de Requisição ​

bash
curl -X POST "https://api.us.basis.tavares.in/v1/ats/user/pipelines/1/stages" \
  -H "X-Ats-Id: 3fa85f64-5717-4562-b3fc-2c963f66afa6" \
  -H "Authorization: Bearer {token}" \
  -H "Content-Type: application/json" \
  -d '{
    "name": "Review of Rejection",
    "type": "rejected",
    "position": 1
  }'

Respostas ​

201 Created

Retorna o ID da etapa criada.

json
{
  "id": 21
}

422 Unprocessable Entity

Erro de validação nos campos enviados, ou tentativa de criar uma segunda etapa do tipo applied no pipeline.

json
{
  "message": "Já existe uma etapa de entrada (applied) neste pipeline",
  "code": "APPLIED_STAGE_EXISTS"
}

403 Forbidden

Ocorre quando o usuário autenticado não possui perfil de administrador (owner ou admin).

Obter Etapa por ID ​

Recupera os detalhes de uma etapa do pipeline.

http
GET /v1/ats/user/pipelines/:pipelineId/stages/:id

Parâmetros de Rota ​

NomeTipoObrigatórioDescrição
pipelineIdnumberSimO ID do pipeline.
idnumberSimO ID da etapa.

Exemplo de Requisição ​

bash
curl -X GET "https://api.us.basis.tavares.in/v1/ats/user/pipelines/1/stages/20" \
  -H "X-Ats-Id: 3fa85f64-5717-4562-b3fc-2c963f66afa6" \
  -H "Authorization: Bearer {token}" \
  -H "Accept: application/json"

Respostas ​

200 OK

Retorna os dados da etapa.

json
{
  "id": 20,
  "atsId": 1,
  "atsPipelineId": 1,
  "name": "Review of Rejection",
  "slug": "review-of-rejection",
  "type": "rejected",
  "position": 1,
  "isTerminal": true,
  "createdAt": "2026-09-10T15:18:39.229+00:00",
  "updatedAt": "2026-09-10T15:18:39.229+00:00"
}

404 Not Found

Ocorre quando a etapa não existe no pipeline informado.

Atualizar Etapa ​

Atualiza o nome e/ou o tipo de uma etapa. Ao alterar o nome, o slug é recalculado automaticamente. Para alterar a posição, utilize o endpoint de reordenação.

http
PUT /v1/ats/user/pipelines/:pipelineId/stages/:id

Payload (Body) ​

AtributoTipoObrigatórioDescrição
namestringNãoNome da etapa (máx. 150 caracteres).
typeenumNãoTipo da etapa: applied, screening, assessment, interview, offer, hired ou rejected.

Exemplo de Requisição ​

bash
curl -X PUT "https://api.us.basis.tavares.in/v1/ats/user/pipelines/1/stages/20" \
  -H "X-Ats-Id: 3fa85f64-5717-4562-b3fc-2c963f66afa6" \
  -H "Authorization: Bearer {token}" \
  -H "Content-Type: application/json" \
  -d '{
    "name": "Review of Rejection (updated)",
    "type": "rejected"
  }'

Respostas ​

204 No Content

Atualização concluída com sucesso.

422 Unprocessable Entity

Erro de validação nos campos enviados, ou tentativa de promover a etapa a applied quando já existe uma etapa de entrada no pipeline (APPLIED_STAGE_EXISTS).

json
{
  "message": "Já existe uma etapa de entrada (applied) neste pipeline",
  "code": "APPLIED_STAGE_EXISTS"
}

Reordenar Etapas ​

Redefine a ordem das etapas do pipeline. A lista ids deve conter todos os IDs das etapas do pipeline, na nova ordem — listas parciais ou com IDs inválidos são rejeitadas.

http
POST /v1/ats/user/pipelines/:pipelineId/stages/reorder

Payload (Body) ​

AtributoTipoObrigatórioDescrição
idsnumber[]SimLista completa dos IDs das etapas do pipeline, na nova ordem desejada.

Exemplo de Requisição ​

bash
curl -X POST "https://api.us.basis.tavares.in/v1/ats/user/pipelines/1/stages/reorder" \
  -H "X-Ats-Id: 3fa85f64-5717-4562-b3fc-2c963f66afa6" \
  -H "Authorization: Bearer {token}" \
  -H "Content-Type: application/json" \
  -d '{
    "ids": [1, 2, 3, 4, 6, 5]
  }'

Respostas ​

204 No Content

Reordenação concluída com sucesso.

422 Unprocessable Entity

A lista informada não corresponde exatamente às etapas do pipeline (IDs faltando, sobrando ou inexistentes).

json
{
  "message": "A lista de etapas informada não corresponde às etapas do pipeline",
  "code": "INVALID_STAGE_IDS"
}

Remover Etapa ​

Exclui uma etapa do pipeline (exclusão lógica). A etapa de entrada (applied) não pode ser removida, assim como qualquer etapa que possua candidaturas vinculadas.

http
DELETE /v1/ats/user/pipelines/:pipelineId/stages/:id

Parâmetros de Rota ​

NomeTipoObrigatórioDescrição
pipelineIdnumberSimO ID do pipeline.
idnumberSimO ID da etapa.

Exemplo de Requisição ​

bash
curl -X DELETE "https://api.us.basis.tavares.in/v1/ats/user/pipelines/1/stages/21" \
  -H "X-Ats-Id: 3fa85f64-5717-4562-b3fc-2c963f66afa6" \
  -H "Authorization: Bearer {token}"

Respostas ​

204 No Content

Remoção concluída com sucesso.

422 Unprocessable Entity

Tentativa de remover a etapa applied (APPLIED_STAGE_LOCKED) ou uma etapa em uso por candidaturas (STAGE_IN_USE).

json
{
  "message": "A etapa de entrada (applied) não pode ser removida",
  "code": "APPLIED_STAGE_LOCKED"
}
json
{
  "message": "Existem candidaturas vinculadas a esta etapa",
  "code": "STAGE_IN_USE"
}