Appearance
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/publicParâmetros de Query
| Nome | Tipo | Obrigatório | Descrição |
|---|---|---|---|
page | number | Não | O número da página (mínimo: 1). |
perPage | number | Não | Itens por página (entre 1 e 100, padrão: 25). |
search | string | Não | Busca por termo no título e na descrição (máx. 200 caracteres). |
workplaceType | enum | Não | Filtra por modelo de trabalho: onsite, hybrid ou remote. |
atsLocationId | number | Não | Filtra por localidade. |
atsCompanyId | number | Não | Filtra 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/:slugParâmetros de Rota
| Nome | Tipo | Obrigatório | Descrição |
|---|---|---|---|
slug | string | Sim | O 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/registerPayload (Body)
| Atributo | Tipo | Obrigatório | Descrição |
|---|---|---|---|
email | string | Sim | E-mail do candidato (máx. 250 caracteres, único na instância). |
password | string | Sim | Senha de acesso (entre 8 e 32 caracteres). |
firstName | string | Sim | Nome do candidato (máx. 100 caracteres). |
lastName | string | Não | Sobrenome 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/loginPayload (Body)
| Atributo | Tipo | Obrigatório | Descrição |
|---|---|---|---|
email | string | Sim | E-mail cadastrado do candidato. |
password | string | Sim | Senha 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/applyParâmetros de Rota
| Nome | Tipo | Obrigatório | Descrição |
|---|---|---|---|
slug | string | Sim | O slug da vaga. |
Payload (Body)
| Atributo | Tipo | Obrigatório | Descrição |
|---|---|---|---|
coverLetter | string | Não | Carta de apresentação (máx. 5000 caracteres). |
atsFileId | number | Não | ID do currículo enviado em POST /files (deve pertencer ao próprio candidato). |
answers | array | Não | Respostas das perguntas de triagem da vaga (ver estrutura abaixo). |
consent | boolean | Sim | Consentimento LGPD — deve ser aceito (true). |
Cada item de answers aceita:
| Atributo | Tipo | Obrigatório | Descrição |
|---|---|---|---|
atsJobQuestionId | number | Sim | ID da pergunta de triagem da vaga. |
valueText | string | Não | Resposta em texto livre (máx. 2000 caracteres). |
valueJson | object | Não | Resposta estruturada (ex.: opção selecionada, pretensão salarial). |
atsFileId | number | Não | ID 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/applicationsParâmetros de Query
| Nome | Tipo | Obrigatório | Descrição |
|---|---|---|---|
page | number | Não | O número da página (mínimo: 1). |
perPage | number | Não | Itens por página (entre 1 e 100, padrão: 25). |
status | enum | Não | Filtra 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/:idParâmetros de Rota
| Nome | Tipo | Obrigatório | Descrição |
|---|---|---|---|
id | number | Sim | O 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/withdrawParâmetros de Rota
| Nome | Tipo | Obrigatório | Descrição |
|---|---|---|---|
id | number | Sim | O 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/meExemplo 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/mePayload (Body)
| Atributo | Tipo | Obrigatório | Descrição |
|---|---|---|---|
firstName | string | Não | Nome do candidato (máx. 100 caracteres). |
lastName | string | Não | Sobrenome do candidato (máx. 100 caracteres). |
phone | string | Não | Telefone de contato (máx. 40 caracteres). |
headline | string | Não | Título profissional (máx. 200 caracteres). |
summary | string | Não | Resumo profissional (máx. 5000 caracteres). |
city | string | Não | Cidade (máx. 100 caracteres). |
country | string | Não | País (máx. 100 caracteres). |
timezone | string | Não | Fuso horário (máx. 50 caracteres, ex.: America/Sao_Paulo). |
skills | array | Não | Lista de habilidades (array de strings). |
experiences | array | Não | Experiências profissionais (array de objetos livres). |
educations | array | Não | Formação acadêmica (array de objetos livres). |
links | object | Não | Links 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-passwordPayload (Body)
| Atributo | Tipo | Obrigatório | Descrição |
|---|---|---|---|
password | string | Sim | Nova 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/logoutExemplo 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/filesPayload (Body)
Requisição no formato multipart/form-data.
| Atributo | Tipo | Obrigatório | Descrição |
|---|---|---|---|
file | file | Sim | Arquivo 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/:idParâmetros de Rota
| Nome | Tipo | Obrigatório | Descrição |
|---|---|---|---|
id | number | Sim | O 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.