Skip to content

Portal do Candidato ​

O portal do candidato é a face pública do seu processo seletivo. Por ele, qualquer visitante pode navegar pelas vagas abertas no job board — sem precisar de conta — e, ao se interessar, criar um cadastro para se candidatar, anexar o currículo e acompanhar o andamento das suas candidaturas.

Enquanto os endpoints públicos expõem somente as vagas open (com salário oculto quando a vaga não o publica), os endpoints autenticados dão ao candidato controle total sobre o próprio perfil, arquivos e inscrições — sempre restritos aos dados dele mesmo.

Headers obrigatórios

Todas as requisições (públicas ou autenticadas) devem incluir o header X-Ats-Id (UUID) com o identificador da instância. Endpoints autenticados exigem também Authorization: Bearer {token}, com o token obtido no login do candidato (guard atsCandidate).

Fluxo recomendado

Para se candidatar a uma vaga, o candidato segue três passos: 1) cria a conta ou faz login (register/login) para obter o token; 2) envia o currículo em POST /files e guarda o id retornado; 3) se candidata em POST /jobs/:slug/apply informando o atsFileId. O mesmo arquivo pode ser reutilizado em várias candidaturas.


Endpoints Públicos ​

Estes endpoints são voltados para o job board e não exigem autenticação de candidato.

Listar Vagas Abertas (Job Board) ​

Retorna as vagas com status open da instância, com paginação e filtros. Quando a vaga não publica o salário (salaryIsPublic falso), os campos salaryMin, salaryMax, salaryCurrency e salaryPeriod são omitidos da resposta.

http
GET /v1/ats/candidate/jobs/public

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 título e na descrição (máx. 200 caracteres).
workplaceTypeenumNãoFiltra por modelo de trabalho: onsite, hybrid ou remote.
atsLocationIdnumberNãoFiltra por localidade.
atsCompanyIdnumberNãoFiltra por empresa.

Exemplo de Requisição ​

bash
curl -X GET "https://api.us.basis.tavares.in/v1/ats/candidate/jobs/public?workplaceType=hybrid&page=1&perPage=25" \
  -H "X-Ats-Id: 3fa85f64-5717-4562-b3fc-2c963f66afa6" \
  -H "Accept: application/json"

Respostas ​

200 OK

Retorna um objeto de paginação contendo as vagas abertas.

json
{
  "meta": {
    "currentPage": 1,
    "perPage": 25
  },
  "data": [
    {
      "id": 1,
      "atsCompanyId": 1,
      "atsLocationId": 1,
      "code": "REQ-2026-001",
      "title": "Desenvolvedor Full Stack Pleno",
      "slug": "desenvolvedor-full-stack-pleno",
      "employmentType": "full_time",
      "workplaceType": "hybrid",
      "seniority": "mid",
      "salaryMin": "8000.00",
      "salaryMax": "12000.00",
      "salaryCurrency": "BRL",
      "salaryPeriod": "month",
      "salaryIsPublic": true,
      "publishedAt": "2026-09-11T00:54:39.315Z",
      "atsCompany": {
        "id": 1,
        "name": "Catho",
        "slug": "catho"
      },
      "atsLocation": {
        "id": 1,
        "name": "Av. Dr. Luís Rocha Miranda",
        "city": "São Paulo",
        "state": "São Paulo",
        "countryCode": "BR"
      }
    }
  ]
}

Obter Vaga por Slug ​

Recupera o detalhe completo de uma vaga aberta, incluindo descrição, requisitos, benefícios e as perguntas de triagem (atsJobQuestions). Por segurança, as perguntas não expõem a regra de knockout — o candidato não sabe qual resposta o elimina automaticamente.

http
GET /v1/ats/candidate/jobs/public/:slug

Parâmetros de Rota ​

NomeTipoObrigatórioDescrição
slugstringSimO slug da vaga.

Exemplo de Requisição ​

javascript
fetch('https://api.us.basis.tavares.in/v1/ats/candidate/jobs/public/desenvolvedor-full-stack-pleno', {
  headers: {
    'X-Ats-Id': '3fa85f64-5717-4562-b3fc-2c963f66afa6'
  }
})
  .then(response => response.json())
  .then(data => console.log(data));

Respostas ​

200 OK

Retorna o detalhe da vaga com empresa, localidade e perguntas de triagem.

json
{
  "id": 1,
  "atsId": 1,
  "atsCompanyId": 1,
  "atsLocationId": 1,
  "code": "REQ-2026-001",
  "title": "Desenvolvedor Full Stack Pleno",
  "slug": "desenvolvedor-full-stack-pleno",
  "description": "## Sobre a vaga\n\nBuscamos um desenvolvedor full stack para atuar no produto principal da empresa, participando do ciclo completo de desenvolvimento: discovery, implementação, code review e deploy.",
  "requirements": "- Experiência sólida com Node.js e TypeScript\n- Vivência com PostgreSQL e Redis\n- Conhecimento em testes automatizados\n- Desejável experiência com AdonisJS",
  "benefits": "- Vale-refeição de R$ 880\n- Plano de saúde e odontológico\n- Horário flexível\n- Auxílio home office",
  "employmentType": "full_time",
  "workplaceType": "hybrid",
  "seniority": "mid",
  "openings": 2,
  "salaryMin": "8000.00",
  "salaryMax": "12000.00",
  "salaryCurrency": "BRL",
  "salaryPeriod": "month",
  "salaryIsPublic": true,
  "publishedAt": "2026-09-11T00:54:39.315Z",
  "closesAt": "2026-10-15T00:00:00.000Z",
  "atsCompany": {
    "id": 1,
    "name": "Catho",
    "slug": "catho"
  },
  "atsLocation": {
    "id": 1,
    "name": "Av. Dr. Luís Rocha Miranda",
    "city": "São Paulo",
    "state": "São Paulo",
    "countryCode": "BR"
  },
  "atsJobQuestions": []
}

404 Not Found

Ocorre quando o slug não existe ou a vaga não está open (rascunhos e vagas encerradas não são visíveis no job board).

Registrar Candidato ​

Cria a conta do candidato na instância. O e-mail deve ser único dentro da instância.

http
POST /v1/ats/candidate/candidates/register

Payload (Body) ​

AtributoTipoObrigatórioDescrição
emailstringSimE-mail do candidato (máx. 250 caracteres, único na instância).
passwordstringSimSenha de acesso (entre 8 e 32 caracteres).
firstNamestringSimNome do candidato (máx. 100 caracteres).
lastNamestringNãoSobrenome do candidato (máx. 100 caracteres).

Exemplo de Requisição ​

bash
curl -X POST "https://api.us.basis.tavares.in/v1/ats/candidate/candidates/register" \
  -H "X-Ats-Id: 3fa85f64-5717-4562-b3fc-2c963f66afa6" \
  -H "Content-Type: application/json" \
  -d '{
    "email": "maria.silva@email.com",
    "password": "Password@123",
    "firstName": "Maria",
    "lastName": "Silva"
  }'

Respostas ​

201 Created

Retorna o ID do candidato criado.

json
{
  "id": 1
}

422 Unprocessable Entity

Erro de validação nos campos enviados — por exemplo, e-mail já cadastrado ou senha com menos de 8 caracteres.

json
{
  "errors": [
    {
      "message": "The email has already been taken",
      "rule": "database.unique",
      "field": "email"
    }
  ]
}

Login do Candidato ​

Autentica o candidato e retorna um token de acesso (guard atsCandidate) com validade de 30 dias. Use o token no header Authorization: Bearer {token} dos endpoints autenticados.

http
POST /v1/ats/candidate/candidates/login

Payload (Body) ​

AtributoTipoObrigatórioDescrição
emailstringSimE-mail cadastrado do candidato.
passwordstringSimSenha de acesso.

Exemplo de Requisição ​

bash
curl -X POST "https://api.us.basis.tavares.in/v1/ats/candidate/candidates/login" \
  -H "X-Ats-Id: 3fa85f64-5717-4562-b3fc-2c963f66afa6" \
  -H "Content-Type: application/json" \
  -d '{
    "email": "maria.silva@email.com",
    "password": "Password@123"
  }'

Respostas ​

200 OK

Retorna o token de acesso do candidato.

json
{
  "type": "bearer",
  "name": "1fcb3871-26f7-4b0f-9c38-eb44b207d22e",
  "token": "oat_MQ.WGhvY0M3N0VVbWZWVzlzTDdnaTJfR0tYX0VjNHZRR2RfQlNjUXItMTIyMzQ0MTU1NTQ",
  "abilities": [
    "*"
  ],
  "lastUsedAt": null,
  "expiresAt": "2026-10-11T01:20:03.177Z"
}

422 Unprocessable Entity

Ocorre quando o e-mail não existe na instância ou a senha está incorreta.

json
{
  "errors": [
    {
      "message": "Email/Senha inválida"
    }
  ]
}

Candidaturas ​

Endpoints protegidos para o candidato gerenciar as próprias inscrições. Requerem o token do candidato (guard atsCandidate).

Candidatar-se a uma Vaga ​

Cria uma candidatura na vaga identificada pelo slug. A candidatura nasce na etapa applied do pipeline da vaga, com appliedAt, stageChangedAt e lastActivityAt preenchidos e histórico inicial gravado.

O campo consent é obrigatório (LGPD): na primeira candidatura, o consentimento é registrado no perfil do candidato (consentAt/consentSource).

http
POST /v1/ats/candidate/jobs/:slug/apply

Parâmetros de Rota ​

NomeTipoObrigatórioDescrição
slugstringSimO slug da vaga.

Payload (Body) ​

AtributoTipoObrigatórioDescrição
coverLetterstringNãoCarta de apresentação (máx. 5000 caracteres).
atsFileIdnumberNãoID do currículo enviado em POST /files (deve pertencer ao próprio candidato).
answersarrayNãoRespostas das perguntas de triagem da vaga (ver estrutura abaixo).
consentbooleanSimConsentimento LGPD — deve ser aceito (true).

Cada item de answers aceita:

AtributoTipoObrigatórioDescrição
atsJobQuestionIdnumberSimID da pergunta de triagem da vaga.
valueTextstringNãoResposta em texto livre (máx. 2000 caracteres).
valueJsonobjectNãoResposta estruturada (ex.: opção selecionada, pretensão salarial).
atsFileIdnumberNãoID de arquivo anexado como resposta.

Exemplo de Requisição ​

bash
curl -X POST "https://api.us.basis.tavares.in/v1/ats/candidate/jobs/desenvolvedor-full-stack-pleno/apply" \
  -H "X-Ats-Id: 3fa85f64-5717-4562-b3fc-2c963f66afa6" \
  -H "Authorization: Bearer {token}" \
  -H "Content-Type: application/json" \
  -d '{
    "coverLetter": "Olá! Tenho 5 anos de experiência com desenvolvimento full stack, atuando principalmente com Node.js, TypeScript e PostgreSQL.",
    "atsFileId": 1,
    "answers": [
      {
        "atsJobQuestionId": 1,
        "valueText": "Sim, tenho disponibilidade para início imediato."
      },
      {
        "atsJobQuestionId": 2,
        "valueJson": {
          "pretensaoSalarial": 11000,
          "moeda": "BRL"
        }
      }
    ],
    "consent": true
  }'

Respostas ​

201 Created

Retorna o ID da candidatura criada.

json
{
  "id": 1
}

Knockout — eliminação automática

Se alguma resposta atingir a regra de knockout de uma pergunta de triagem, a candidatura é criada normalmente (201), mas nasce automaticamente movida para a etapa rejected, com status rejected. O candidato não recebe nenhum sinal disso na resposta.

422 Unprocessable Entity

Erro de validação (ex.: consent não aceito ou atsFileId de outro candidato) ou erro de regra de negócio: vaga não está open (JOB_NOT_OPEN), prazo de inscrição encerrado (JOB_CLOSED) ou candidato já inscrito na vaga (ALREADY_APPLIED).

json
{
  "message": "Candidato já inscrito nesta vaga",
  "code": "ALREADY_APPLIED"
}

404 Not Found

Ocorre quando o slug da vaga não existe na instância.

Listar Minhas Candidaturas ​

Retorna, com paginação, apenas as candidaturas do candidato autenticado.

http
GET /v1/ats/candidate/applications

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).
statusenumNãoFiltra por status: active, on_hold, hired, rejected ou withdrawn.

Exemplo de Requisição ​

bash
curl -X GET "https://api.us.basis.tavares.in/v1/ats/candidate/applications?status=active" \
  -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 candidaturas do candidato, com a etapa atual e a vaga.

json
{
  "meta": {
    "currentPage": 1,
    "perPage": 25
  },
  "data": [
    {
      "id": 1,
      "atsId": 1,
      "atsJobId": 1,
      "atsCandidateId": 1,
      "atsPipelineId": 1,
      "atsStageId": 1,
      "status": "active",
      "source": "job_board",
      "rating": null,
      "appliedAt": "2026-09-11T02:34:31.641+00:00",
      "stageChangedAt": "2026-09-11T02:34:31.641+00:00",
      "lastActivityAt": "2026-09-11T02:34:31.641+00:00",
      "createdAt": "2026-09-11T02:34:31.648+00:00",
      "updatedAt": "2026-09-11T02:34:31.648+00:00",
      "atsCandidate": {
        "id": 1,
        "firstName": "Maria",
        "lastName": "Silva",
        "email": "maria.silva@email.com",
        "headline": "Desenvolvedora Full Stack Plena"
      },
      "atsStage": {
        "id": 1,
        "name": "New",
        "type": "applied",
        "position": 1
      },
      "atsJob": {
        "id": 1,
        "title": "Desenvolvedor Full Stack Pleno",
        "atsCompanyId": 1
      }
    }
  ]
}

Obter Candidatura por ID ​

Recupera o detalhe completo de uma candidatura, incluindo respostas das perguntas de triagem, currículo anexado e histórico de etapas. O candidato só pode acessar as próprias candidaturas.

http
GET /v1/ats/candidate/applications/:id

Parâmetros de Rota ​

NomeTipoObrigatórioDescrição
idnumberSimO ID da candidatura.

Exemplo de Requisição ​

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

Respostas ​

200 OK

Retorna a candidatura com vaga, etapa, respostas e histórico de movimentações.

json
{
  "id": 1,
  "atsId": 1,
  "atsJobId": 1,
  "atsCandidateId": 1,
  "atsPipelineId": 1,
  "atsStageId": 1,
  "status": "active",
  "source": "job_board",
  "atsFileId": 1,
  "coverLetter": "Olá! Tenho 5 anos de experiência com desenvolvimento full stack, atuando principalmente com Node.js, TypeScript e PostgreSQL.",
  "rating": null,
  "atsRejectionReasonId": null,
  "rejectionNote": null,
  "appliedAt": "2026-09-11T02:34:31.641+00:00",
  "stageChangedAt": "2026-09-11T02:34:31.641+00:00",
  "lastActivityAt": "2026-09-11T02:34:31.641+00:00",
  "hiredAt": null,
  "rejectedAt": null,
  "withdrawnAt": null,
  "createdAt": "2026-09-11T02:34:31.648+00:00",
  "updatedAt": "2026-09-11T02:34:31.648+00:00",
  "atsJob": {
    "id": 1,
    "title": "Desenvolvedor Full Stack Pleno",
    "atsCompanyId": 1
  },
  "atsStage": {
    "id": 1,
    "name": "New",
    "type": "applied",
    "position": 1
  },
  "atsFile": {
    "id": 1,
    "name": "curriculo.pdf",
    "extension": "pdf",
    "mime": "application/pdf",
    "size": 115579,
    "url": "https://s3.sa-east-1.amazonaws.com/tavares-dev/files/7af7ff84-4b0e-4ee8-becb-308d88dc7997.pdf",
    "hash": "7af7ff84-4b0e-4ee8-becb-308d88dc7997"
  },
  "atsApplicationAnswers": [
    {
      "id": 1,
      "atsJobQuestionId": 1,
      "valueText": "Sim, tenho disponibilidade para início imediato.",
      "valueJson": null,
      "atsFileId": null,
      "atsJobQuestion": {
        "id": 1,
        "label": "Você tem experiência com TypeScript?",
        "type": "single_choice"
      }
    }
  ],
  "atsApplicationStageHistories": [
    {
      "id": 1,
      "fromStageId": null,
      "toStageId": 1,
      "changedByUserId": null,
      "secondsInFrom": null,
      "changedAt": "2026-09-11T02:34:31.641+00:00",
      "fromStage": null,
      "toStage": {
        "id": 1,
        "name": "New",
        "type": "applied"
      }
    }
  ]
}

404 Not Found

Ocorre quando a candidatura não existe ou pertence a outro candidato.

Desistir da Candidatura ​

Retira a candidatura do processo seletivo. A desistência não muda a etapa da candidatura — apenas altera o status para withdrawn e registra withdrawnAt. Candidaturas já encerradas (hired ou withdrawn) não podem ser retiradas.

http
PATCH /v1/ats/candidate/applications/:id/withdraw

Parâmetros de Rota ​

NomeTipoObrigatórioDescrição
idnumberSimO ID da candidatura.

Exemplo de Requisição ​

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

Respostas ​

204 No Content

Desistência registrada com sucesso.

422 Unprocessable Entity

Ocorre quando a candidatura já está encerrada (hired ou withdrawn).

json
{
  "message": "Candidatura encerrada não pode ser retirada",
  "code": "APPLICATION_CLOSED"
}

404 Not Found

Ocorre quando a candidatura não existe ou pertence a outro candidato (APPLICATION_NOT_FOUND).


Perfil do Candidato ​

Endpoints protegidos para o candidato consultar e manter o próprio perfil profissional.

Obter Meu Perfil ​

Retorna o perfil completo do candidato autenticado, incluindo experiências, educação, links e skills.

http
GET /v1/ats/candidate/candidates/me

Exemplo de Requisição ​

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

Respostas ​

200 OK

Retorna o perfil completo do candidato.

json
{
  "id": 1,
  "atsId": 1,
  "firstName": "Maria",
  "lastName": "Silva",
  "email": "maria.silva@email.com",
  "phone": "+55 11 98765-4321",
  "headline": "Desenvolvedora Full Stack Plena",
  "summary": "Desenvolvedora full stack com 5 anos de experiência em Node.js, TypeScript e React.",
  "city": "São Paulo",
  "country": "Brasil",
  "timezone": "America/Sao_Paulo",
  "skills": [
    "Node.js",
    "TypeScript",
    "React",
    "PostgreSQL",
    "Redis"
  ],
  "experiences": [
    {
      "title": "Desenvolvedora Full Stack Plena",
      "company": "Tech Corp",
      "current": true,
      "endDate": null,
      "startDate": "2022-03",
      "description": "Desenvolvimento de APIs REST e interfaces web para o produto principal da empresa."
    }
  ],
  "educations": [
    {
      "degree": "Bacharelado em Ciência da Computação",
      "endDate": "2019-12",
      "startDate": "2016-02",
      "institution": "Universidade de São Paulo"
    }
  ],
  "links": {
    "github": "https://github.com/mariasilva",
    "linkedin": "https://www.linkedin.com/in/maria-silva"
  },
  "resumeText": null,
  "isBlocked": false,
  "consentAt": null,
  "consentSource": null,
  "purgeAfterAt": null,
  "createdAt": "2026-09-11T01:19:59.812+00:00",
  "updatedAt": "2026-09-11T01:25:08.562+00:00",
  "atsTags": [],
  "atsApplications": [],
  "atsFiles": []
}

Atualizar Meu Perfil ​

Atualiza os dados do perfil do candidato autenticado. Todos os campos são opcionais — envie apenas os que deseja alterar.

http
PUT /v1/ats/candidate/candidates/me

Payload (Body) ​

AtributoTipoObrigatórioDescrição
firstNamestringNãoNome do candidato (máx. 100 caracteres).
lastNamestringNãoSobrenome do candidato (máx. 100 caracteres).
phonestringNãoTelefone de contato (máx. 40 caracteres).
headlinestringNãoTítulo profissional (máx. 200 caracteres).
summarystringNãoResumo profissional (máx. 5000 caracteres).
citystringNãoCidade (máx. 100 caracteres).
countrystringNãoPaís (máx. 100 caracteres).
timezonestringNãoFuso horário (máx. 50 caracteres, ex.: America/Sao_Paulo).
skillsarrayNãoLista de habilidades (array de strings).
experiencesarrayNãoExperiências profissionais (array de objetos livres).
educationsarrayNãoFormação acadêmica (array de objetos livres).
linksobjectNãoLinks externos (ex.: LinkedIn, GitHub).

Exemplo de Requisição ​

bash
curl -X PUT "https://api.us.basis.tavares.in/v1/ats/candidate/candidates/me" \
  -H "X-Ats-Id: 3fa85f64-5717-4562-b3fc-2c963f66afa6" \
  -H "Authorization: Bearer {token}" \
  -H "Content-Type: application/json" \
  -d '{
    "firstName": "Maria",
    "lastName": "Silva",
    "phone": "+55 11 98765-4321",
    "headline": "Desenvolvedora Full Stack Plena",
    "city": "São Paulo",
    "country": "Brasil",
    "timezone": "America/Sao_Paulo",
    "skills": ["Node.js", "TypeScript", "React", "PostgreSQL", "Redis"],
    "experiences": [
      {
        "company": "Tech Corp",
        "title": "Desenvolvedora Full Stack Plena",
        "startDate": "2022-03",
        "endDate": null,
        "current": true,
        "description": "Desenvolvimento de APIs REST e interfaces web para o produto principal da empresa."
      }
    ],
    "educations": [
      {
        "institution": "Universidade de São Paulo",
        "degree": "Bacharelado em Ciência da Computação",
        "startDate": "2016-02",
        "endDate": "2019-12"
      }
    ],
    "links": {
      "linkedin": "https://www.linkedin.com/in/maria-silva",
      "github": "https://github.com/mariasilva"
    }
  }'

Respostas ​

204 No Content

Atualização concluída com sucesso.

422 Unprocessable Entity

Erro de validação nos campos enviados.

Trocar Senha ​

Altera a senha de acesso do candidato autenticado.

http
PATCH /v1/ats/candidate/candidates/change-password

Payload (Body) ​

AtributoTipoObrigatórioDescrição
passwordstringSimNova senha (entre 8 e 32 caracteres).

Exemplo de Requisição ​

bash
curl -X PATCH "https://api.us.basis.tavares.in/v1/ats/candidate/candidates/change-password" \
  -H "X-Ats-Id: 3fa85f64-5717-4562-b3fc-2c963f66afa6" \
  -H "Authorization: Bearer {token}" \
  -H "Content-Type: application/json" \
  -d '{
    "password": "NovaSenha@456"
  }'

Respostas ​

204 No Content

Senha alterada com sucesso. A senha antiga deixa de ser aceita no login imediatamente.

422 Unprocessable Entity

Erro de validação — por exemplo, senha com menos de 8 caracteres.

Logout ​

Invalida o token de acesso atual do candidato. Após o logout, o token não pode mais ser usado.

http
POST /v1/ats/candidate/candidates/logout

Exemplo de Requisição ​

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

Respostas ​

204 No Content

Logout realizado com sucesso — o token foi invalidado.


Arquivos (Currículos e Anexos) ​

Endpoints protegidos para o candidato enviar e remover os próprios arquivos, como currículos usados nas candidaturas.

Enviar Arquivo ​

Faz upload de um arquivo (currículo ou anexo) vinculado ao candidato autenticado. O id retornado pode ser informado como atsFileId no apply ou nas respostas das perguntas de triagem.

O upload exige um provedor de armazenamento configurado na instância e aceita apenas arquivos pdf, doc, docx, txt ou md de até 10 MB.

http
POST /v1/ats/candidate/files

Payload (Body) ​

Requisição no formato multipart/form-data.

AtributoTipoObrigatórioDescrição
filefileSimArquivo a ser enviado (pdf, doc, docx, txt ou md — máx. 10 MB).

Exemplo de Requisição ​

bash
curl -X POST "https://api.us.basis.tavares.in/v1/ats/candidate/files" \
  -H "X-Ats-Id: 3fa85f64-5717-4562-b3fc-2c963f66afa6" \
  -H "Authorization: Bearer {token}" \
  -F "file=@curriculo.pdf;type=application/pdf"

Respostas ​

201 Created

Retorna o ID e a URL do arquivo armazenado.

json
{
  "id": 1,
  "url": "https://s3.sa-east-1.amazonaws.com/tavares-dev/files/7af7ff84-4b0e-4ee8-becb-308d88dc7997.pdf"
}

422 Unprocessable Entity

Ocorre quando nenhum provedor de armazenamento está configurado na instância, quando a extensão não é permitida ou quando o arquivo excede 10 MB.

json
{
  "errors": [
    {
      "message": "Nenhum provedor de armazenamento configurado"
    }
  ]
}

Remover Arquivo ​

Remove um arquivo enviado pelo candidato autenticado. O registro é removido da listagem (soft delete) e, dependendo da configuração do provedor de armazenamento, o arquivo físico também é excluído.

http
DELETE /v1/ats/candidate/files/:id

Parâmetros de Rota ​

NomeTipoObrigatórioDescrição
idnumberSimO ID do arquivo.

Exemplo de Requisição ​

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

Respostas ​

204 No Content

Remoção concluída com sucesso.

404 Not Found

Ocorre quando o arquivo não existe ou pertence a outro candidato.