Fluxo de Criação de Vagas

Esse fluxo contempla a integração entre o sistema de requisição de vaga da empresa com o produto Gupy R&S.

📘

Requisitos para criação de vagas

Para utilizar esse fluxo é necessário que o setup da sua plataforma já esteja com os dados de cargos, áreas e filiais preenchidos e atualizados.

Habilitando endpoints

Para utilizar este fluxo, é necessário utilizar o Bearer Token gerado nas configurações avançadas da plataforma. Acesse nossa seção de autenticação para saber como gerar o o token de autenticação.

Abaixo encontra-se uma sugestão dos endpoints que devem ser habilitados obrigatoriamente para o funcionamento perfeito deste fluxo.

713

Criando uma vaga na Gupy

Fazer uma requisição para o endpoint POST Jobs, preenchendo os campos com os parâmetros obrigatórios. Veja o detalhamento os campos obrigatórios e dos campos recomendados abaixo.

📘

Atenção!

A criação de uma vaga através da API sempre irá criar com status "draft", se a sua necessidade é que a vaga entre na Gupy como aprovada ou publicada será necessário chamar outro endpoint para alterar o status após a criação. Consulte esse fluxo clicando aqui

Não há tratativas para caracteres especiais, a informação será cadastrada conforme foi enviada.

Exemplo: Se no nome da vaga houver a palavra "P&D" a mesma será cadastrada e exibida como "P&D"

ParâmetroDescrição
codeRefere-se ao código interno da vaga atribuído pelo sistema terceiro
nameTítulo dado para a vaga
typeModo de contratação
publicationTypeSe a vaga será interna ou externa
numVacanciesNúmero de pessoas que serão contratadas para uma mesma vaga.
departmentIdCódigo da área gerado automaticamente pela Gupy (campo Id) que a vaga está atrelada.
roleIdCódigo do cargo gerado automaticamente pela Gupy (campo Id) que a vaga está atrelada.
branchIdCódigo da filial gerado automaticamente pela Gupy (campo Id)

Obtendo roleid

Com o seu código de cargo (id interno) utilize o GET Roles com o parâmetro code = código de cargo (id interno).

Caso o response retorne algum registro, armazenar results.id para utilizá-lo no POST Jobs com roleId.

Caso o response não retorne nenhum registro, utilizar o POST Roles com:
name = Nome do Cargo
code = seu código de cargo (id interno)
similiarTo = criar regra com o seu RH

Após sucesso, armazenar results.id para utilizá-lo no POST Jobs com roleId.

Exemplo de requisição

curl --request GET \
     --url 'https://api.gupy.io/api/v1/roles?code=3912&perPage=10&page=1' \
     --header 'accept: application/json' \
     --header 'authorization: Bearer XXXXXXXX-XXXX-XXXX-XXXXXXXXXXXX'

Exemplo de resposta

{
  "results": [
    {
      "id": 7872,
      "name": "Analista de Integrações",
      "code": 3912,
      "similarTo": "analyst",
      "createdAt": "2018-07-17T17:58:12.965Z",
      "updatedAt": "2022-11-17T19:26:15.969Z"
    }
  ],
  "totalResults": 1,
  "page": 1,
  "totalPages": 1
}

Obtendo departmentId

Com o seu código de área (id interno) utilize o GET Departments com o parâmetro code = código de cargo (id interno).

Caso o response retorne algum registro, armazenar results.id para utilizá-lo no POST Jobs com roleId.

Caso o response não retorne nenhum registro, utilizar o POST Departments com
name = Nome da área
code = seu código de área (id interno)
similiarTo = criar regra com o seu RH

Após sucesso, armazenar results.id para utiliza-lo no POST Jobs com roleId.

Exemplo de requisição

curl --request GET \
     --url 'https://api.gupy.io/api/v1/departments?perPage=10&page=1' \
     --header 'accept: application/json' \
     --header 'authorization: Bearer XXXXXXXX-XXXX-XXXX-XXXXXXXXXXXX'

Exemplo de resposta

{
  "results": [
    {
      "id": 5962,
      "name": "Administrativo (Adm.)",
      "code": 1439,
      "similarTo": "financial_management",
      "createdAt": "2018-07-17T16:49:14.159Z",
      "updatedAt": "2021-08-25T13:37:39.823Z"
    }
  ],
  "totalResults": 1,
  "page": 1,
  "totalPages": 1
}

Obtendo branchId

Com o seu código de filial (id interno) utilize o GET Branches com o parâmetro code = código de cargo (id interno).

Caso o response retorne algum registro, armazenar results.id para utilizá-lo no POST Jobs com branchId.

Caso o response não retorne nenhum registro, utilizar o POST Branches com
code = seu código de cargo (id interno)
name = nome da filial
path = o caminho na estrutura orgazinacional

Após sucesso, armazenar results.id para utiliza-lo no POST Jobs com branchId.

Exemplo de requisição

curl --request GET \
     --url 'https://api.gupy.io/api/v1/branches?perPage=10&page=1' \
     --header 'accept: application/json' \
     --header 'authorization: Bearer XXXXXXXX-XXXX-XXXX-XXXXXXXXXXXX'

Exemplo de resposta

{
  "results": [
    {
      "id": 2743,
      "code": 3,
      "name": " MATRIZ",
      "path": [
        "matriz"
      ],
      "addressCountry": "Brasil",
      "addressCountryShortName": "BRA",
      "addressState": "São Paulo",
      "addressStateShortName": "SP",
      "addressCity": "São Paulo",
      "addressStreet": "Rua Haddock Lobo",
      "addressNumber": null,
      "addressZipCode": "1414000",
      "addressLatitude": -23.5599941,
      "addressLongitude": -46.66387049999999,
      "createdAt": "2019-06-20T13:44:09.932Z",
      "updatedAt": "2020-06-25T13:27:20.227Z"
    }
  ],
  "totalResults": 1,
  "page": 1,
  "totalPages": 1
}

Vagas com templates (opcional)

Templates são modelos de vaga previamente criados pelo RH direto na plataforma da Gupy. Eles proporcionam mais facilidade na abertura de vagas similares por já conterem as principais informações descritas.

Caso deseje enviar a vaga com um template já determinado, acesse o endpoint GET Job Templates.

O template desejado pode ser encontrado através de:

  • name: nome do template
  • roleId: a roleId recuperada no passo Obtendo roleid pode ser utilizada para fazer a busca pelo template que está atrelado a um determinado cargo.

Exemplo de requisição (por nome)

curl --request GET \
     --url 'https://api.gupy.io/api/v1/job-templates?name=%5BVAGA%20MODELO%5D%20Coordenador%28a%29%20de%20Conte%C3%BAdo&perPage=10&page=1' \
     --header 'accept: application/json' \
     --header 'authorization: Bearer XXXXXXXX-XXXX-XXXX-XXXXXXXXXXXX'

Exemplo de resposta

{
  "results": [
    {
      "id": 3640152,
      "name": "[VAGA MODELO] Coordenador(a) de Conteúdo",
      "type": "vacancy_type_talent_pool",
      "departmentId": 21021,
      "departmentName": "Marketing",
      "roleId": 62872,
      "roleName": "Coordenador de Vendas",
      "branchId": null,
      "branchName": null,
      "createdAt": "2022-12-07T14:07:36.086Z",
      "updatedAt": "2023-07-04T18:06:55.735Z"
    }
  ],
  "totalResults": 1,
  "page": 1,
  "totalPages": 1
}

📘

Templates

A API faz uma busca de templates que contém o nome pesquisado, portanto, se o template estiver com a descrição, por exemplo, "ASSISTENTE I" e "ASSISTENTE II", caso seja incluído "ASSISTENTE I"; no campo name, a API vai retornar "ASSISTENTE I"; e "ASSISTENTE II"

É importante testar os cenários de diferentes cargos para evitar puxar o template incorreto.

Acessar o endpoint POST Jobs, adicionando o templateId.

ParâmetroDescrição
templateIdCódigo do template gerado automaticamente pela Gupy (campo id) para determinada vaga

📘

Campos managerEmail e recruiterEmail

Os e-mails que serão colocados na requisição precisam estar atrelados à pessoas usuárias na plataforma, caso contrário, a requisição irá retornar erro 400.

Para ver os usuários cadastrados acesse o endpoint GET Users utilizando o e-mail como filtro para saber se ele está cadastrado.

❗️

Atenção

A API pode também retornar e-mails similares ao que você está buscando. Portanto se atente ao resultado da busca através do endpoint GET Users afim de verificar se o retorno é exatamente igual ao e-mail que será passado na request.

Exemplo de requisição

curl --request POST \
     --url https://api.gupy.io/api/v1/jobs \
     --header 'accept: application/json' \
     --header 'authorization: Bearer XXXXXXXX-XXXX-XXXX-XXXXXXXXXXXX' \
     --header 'content-type: application/json' \
     --data '
{
     "name": "Analista de Integrações",
     "type": "vacancy_type_effective",
     "numVacancies": 2,
     "departmentId": 4767,
     "roleId": 9452,
     "templateId": 3456
}
'

Exemplo de resposta

{
  "id": 4146770,
  "code": "483",
  "name": "Analista de Integrações",
  "status": "draft",
  "type": "vacancy_type_effective",
  "publicationType": "internal",
  "numVacancies": 1,
  "departmentId": 4767,
  "departmentName": "Administrativo (Adm.)",
  "roleId": 9452,
  "roleName": "Analista Teste Z",
  "subsidiaryId": 2743,
  "subsidiaryName": "MATRIZ",
  "createdAt": "2023-02-17T14:18:46.719Z",
  "updatedAt": "2023-02-17T14:18:46.969Z",
  "hiringDeadline": null,
  "description": "Descrição da vaga",
  "responsibilities": "Funções da vaga",
  "prerequisites": "Pré-requisitos para se candidatarem à vaga",
  "additionalInformation": "informações adicionais sobre a vaga",
  "notes": "Notas sobre a vaga",
  "disabilities": true,
  "addressStreet": "Avenida Paulista",
  "addressNumber": "1234",
  "addressCity": "São Paulo",
  "addressState": "São Paulo",
  "addressStateShortName": "SP",
  "addressCountry": "Brasil",
  "addressCountryShortName": "BR",
  "addressZipCode": "38043873",
  "addressLatitude": null,
  "addressLongitude": null,
  "remoteWorking": false,
  "reason": "staff_increase",
  "image": null,
  "socialMediaImage": null,
  "applicationDeadline": null,
  "careerPageId": null,
  "careerPageName": null,
  "vacancyCodes": [],
  "managerId": null,
  "managerName": null,
  "managerEmail": null,
  "recruiterId": null,
  "recruiterName": null,
  "recruiterEmail": null,
  "salary": {
    "currency": "BRL",
    "startsAt": 3000,
    "endsAt": 6000
  },
 
  "jobRatingCriterias": [],
  "cancelReason": null,
  "cancelReasonNotes": null,
  "cancelAt": null,
  "publishedAt": null,
  "closedAt": null,
  "approvedAt": null,
  "disapprovedAt": null,
  "lastFreezeDate": null,
  "lastUnfreezeDate": null,
  "creatorId": 22011,
  "creatorName": "Public API",
  "creatorEmail": "[email protected]",
  "videoUrl": null,
  "approvers": null,
  "workflowRequestMethod": null,
  "branchId": 2743,
  "branchName": "MATRIZ"
}

Vagas com campos customizados (opcional)

📘

Campos Customizados

São campos que a empresa cria diretamente na plataforma para que sejam preenchidos em tela ou através da API da Gupy. Os campos customizados são excelentes formas de inserir informações adicionais na vaga que façam sentido para o processo seletivo, como por exemplo: centro de custo, data desejada para entrada, time que fará parte ao entrar na empresa.

Consulte nossa documentação dedicada dessa funcionalidade clicando aqui.

Os diferentes tipos de campos customizados são:

  • Data
  • Texto curto
  • Numérico
  • Sim/Não
  • Horário
  • Lista Suspensa
  • Lista de Opções (multiseleção)
  • Anexar arquivo
  • Campo condicional

Estrutura dos campos customizados

  • id: identificador do campo
  • required: se o campo é obrigatório ou não
  • label: título do campo
  • type: tipo do campo
  • order: ordem do campo
  • value: resposta do campo (caso houver)
  • enum: possíveis respostas disponíveis

Logo abaixo temos um exemplo da estrutura de dados de Campos Customizados.

[
   {
      "id":"57e848a6-8e76-4f70-b72b-8833896f5c8a",
      "required":false,
      "label":"Você possui aprovação para essa vaga?",
      "type":"boolean",
      "order":1
   },
   {
      "id":"771d9680-00cc-4485-81cc-2a2fc2fc0581",
      "required":true,
      "label":"Qual o período?",
      "type":"select",
      "order":2,
      "enum":[
         "Manhã",
         "Tarde",
         "Noite"
      ],
      "value":"Manhã"
   },
   {
      "id":"123d9680-00cc-4485-81cc-2a2fc2fc0581",
      "required":false,
      "label":"Essa vaga foi requisitada internamente?",
      "type":"conditional",
      "order":3,
      "value":"Não",
      "enum":[
         "Sim",
         "Não"
      ],
      "conditionalOptions":[
         {
            "conditionalOption":"Sim",
            "conditionalQuestions":[
               {
                  "id":"42223321-8419-4532-8443-9d40bccc4190",
                  "required":false,
                  "label":"Quem requisitou a vaga?",
                  "type":"string",
                  "order":1
               }
            ]
         }
      ]
   }
]

Preenchendo campos customizados via API

O preenchimento de um campo customizado ocorre na criação ou atualização de uma vaga e em ambas situações é necessário enviar um array de objetos, onde em cada objeto deverá existir duas propriedades.

  • id: o identificador do campo que será respondido
  • value: a resposta para o campo
 "customFields": [
    {
      "id": "XXXXXXXX-XXXX-XXXX-XXXX-XXXXXXXXXXXX",
      "value": "Sim"
    },
    {
      "id": "XXXXXXXX-XXXX-XXXX-XXXX-XXXXXXXXXXXX",
      "value": [
        "ABC",
        "123",
        "0005412 - CC"
      ]
    }
  ],

Para obter o id de um campo customizado:

  1. Acesse o endpoint GET findcompanycustomfields
  2. Clique em "Try it!" e salve o results.id do campo que deseja

Possíveis erros

Reposta vazia

Para qualquer uma das consultas, se a resposta for igual ao exemplo de baixo (ou seja, vazio). Para resolver isso, será necessário utilizar o POST Roles ou POST Departments para criar os campos necessários.

{
"results": [],
"totalResults": 0,
"page": 1,
"totalPages": 1
}

Campos customizados modificados

Campos customizados do tipo múltipla seleção, por exemplo, são formados por arrays. Alterar essa configuração fará com que ocorram erros. Se atente ao tipo de campo customizado e como é a sua respectiva estrutura para a implementação correta.

Um novo campo customizado só poderá ser utilizado em vagas criadas posteriores à ele.

A deleção e posterior criação de um campo customizado altera o seu Id.

Atrelar usuários inexistentes nas vagas

Os e-mails que serão colocados nos campos de managerEmail e recruiterEmail da requisição precisam estar atrelados à pessoas usuárias na plataforma, caso contrário, a requisição irá retornar erro 400.

Para ver os usuários cadastrados acesse o endpoint GET Users utilizando o e-mail como filtro para saber se ele está cadastrado.

Como ficará essa integração na Gupy?

Na gestão de vagas da plataforma é possível ver a vaga criada em formato rascunho.