Autenticação
Mudança de método
Rota: /api/v1/scrape/latest-results GET -> POST.
Header Obrigatório
Todas as requisições devem incluir o header: Accept:
application/json.
Autenticação Bearer Token
Para endpoints protegidos, o token deve ser enviado no header de autorização: Authorization: Bearer {SEU_TOKEN}.
Registro de Usuário
POST /api/v1/register
Autenticação: Não requerida
Entradas (body):
{
"name": "João Silva",
"email": "joao@example.com",
"password": "12345678",
"password_confirmation": "12345678"
}
| Campo | Tipo | Obrigatório | Observações |
|---|---|---|---|
| name | string | sim | Nome completo do usuário |
| string | sim | Email válido, deve ser único | |
| password | string | sim | Senha mínima de 6 caracteres |
| password_confirmation | string | sim | Deve ser igual ao campo password |
Retorno (201 Created):
{
"token": "1|klsjdf9834jkl2349u23kljdf",
"user": {
"id": 1,
"name": "João Silva",
"email": "joao@example.com",
"created_at": "2025-08-16T15:00:00.000000Z",
"updated_at": "2025-08-16T15:00:00.000000Z"
}
}
Erros:
422 Unprocessable Entity:
{
"message": "The given data was invalid.",
"errors": {
"email": ["O email já foi registrado."],
"password": ["A confirmação da senha não corresponde."]
}
}
Login
POST /api/v1/login
Autenticação: Não requerida
Entradas (body):
{
"email": "usuario@email.com",
"password": "minhaSenhaSegura"
}
Retorno (200 OK):
{
"token": "string",
"user": { ...dados do usuário... }
}
Erros:
422 Unprocessable Entity: campos obrigatórios ausentes ou inválidos
401 Unauthorized: credenciais inválidas
Logout 🛡️
POST /api/v1/logout
Controller: AuthController@logout
Autenticação: Bearer {token}
Entradas:
Nenhuma
Retorno (200 OK):
{
"message": "Token revogado com sucesso"
}
Erros:
401 Unauthorized: token inválido ou ausente
Usuário Autenticado 🛡️
GET /api/v1/user
Autenticação: Bearer {token}
Entradas:
Nenhuma
Retorno (200 OK):
{
"id": 1,
"name": "Usuário Exemplo",
"email": "user@email.com"
}
Erros:
401 Unauthorized: token inválido ou ausente
Postos
Listar Postos 🛡️
GET /api/v1/accounts
Autenticação: Bearer {token}
Retorno (200 OK):
[
{
"id": 1,
"name": "Minha Conta",
"login_user": "user",
"login_password": "********"
}
]
Erros:
401 Unauthorized: token inválido ou ausente
Criar Posto 🛡️
POST /api/v1/accounts
Autenticação: Bearer {token}
Entradas (body):
{
"name": "Conta Principal",
"login_user": "meuLogin",
"login_password": "minhaSenha"
}
Retorno (201 Created):
{
"id": 2,
"name": "Conta Principal",
"login_user": "meuLogin",
"login_password": "********"
}
Erros:
422 Unprocessable Entity: dados inválidos ou campos obrigatórios ausentes
409 Conflict: nome de conta já existe
401 Unauthorized: token inválido ou ausente
Atualizar Postos 🛡️
PUT /api/v1/accounts/{account}
Autenticação: Bearer {token}
Entradas (body):
{
"name": "Conta Atualizada",
"login_user": "novoLogin",
"login_password": "novaSenha"
}
Retorno (200 OK):
{
"id": 2,
"name": "Conta Atualizada",
"login_user": "novoLogin",
"login_password": "********"
}
Erros:
404 Not Found: conta não encontrada
422 Unprocessable Entity: dados inválidos
401 Unauthorized: token inválido ou ausente
Scraper
Mudança de método
Rota: /api/v1/scrape/latest-results GET -> POST.
Iniciar Processo de Scraping 🛡️
POST /api/v1/scraping/run-now/{posto}/{fabricante}
Autenticação: (Bearer {token})
Dispara o processo de scraping em segundo plano para o posto escolhido e para o fabricante escolhido. A operação é assíncrona e os jobs são enviados para uma fila.
Parametros (Opcional):
?startDate=17/08/2025 14:30
Define o inicio do intervalo da data de abertura de OS.
Corpo da Requisição:
Nenhum
Retorno (202 Accepted):
{
"message": "Job de scraping foi despachado para a fila. Posto: {posto}. Fabricante: {fabricante}. Intervalo: {startDate/Ultima Requisiçao para aquele fabricante e posto} - {dateTime atual}",
"uuid": {id da requisição de scraping - usado no body da rota /api/v1/scrape/latest-result}
}
Erros:
404 Not Found:
{
"message": "A empresa '{company}' não é um fabricante válido. Os valores aceitos são: 'Newmaq', 'New.Up!', 'Mueller', 'Libell', 'Colormaq'"
}
401 Unauthorized:
{
"message": "Unauthenticated."
}
403 Forbidden:
{
"message": "Conta não encontrada ou não pertence a este usuário"
}
Listar Todos os Resultados (UUIDs) 🛡️
GET /api/v1/scrape/all
Autenticação: (Bearer {token})
Retorna todos os resultados de scraping associados ao usuário autenticado, contendo apenas `uuid` e `created_at`.
Corpo da Requisição:
Nenhum
Retorno (200 OK):
[
{
"uuid": "123e4567-e89b-12d3-a456-426614174000",
"created_at": "2025-08-17T20:34:15.000000Z"
},
{
"uuid": "223e4567-e89b-12d3-a456-426614174001",
"created_at": "2025-08-17T20:40:22.000000Z"
}
]
Buscar Resultado Específico por UUID 🛡️
POST /api/v1/scrape/latest-results
Autenticação: (Bearer {token})
Retorna o último resultado de scraping para uma uuid específica, associado ao usuário autenticado.
Corpo da Requisição:
{
"uuid": "123e4567-e89b-12d3-a456-426614174000"
}
Retorno (200 OK):
{
"data_os": {
"field1": "valor",
"field2": "valor"
}
}
Erros:
404 Not Found:
{
"message": "Nenhum resultado encontrado."
}
401 Unauthorized:
{
"message": "Unauthenticated."
}
Erros de Scraper (em geral)
400 Bad Request: parâmetros inválidos na requisição
503 Service Unavailable: falha de conexão com o serviço de scraping externo