POST https://declara-web.vercel.app/api/v1/auth/validate

Verifica se uma chave API é válida e pertence ao e-mail informado. Retorna os dados da empresa vinculada.

Esta rota é pública — não requer autenticação prévia.

Body

emailstringobrigatório
E-mail cadastrado no Declara Web.
apiKeystringobrigatório
Chave API gerada no Declara Web (começa com sk_declara_).

Resposta

validbooleantrue quando as credenciais são válidas.
empresa.idstringUUID da empresa
empresa.razao_socialstringRazão social
empresa.cnpjstringCNPJ formatado
empresa.emailstringE-mail cadastrado
empresa.statusstringStatus da conta (ativo, suspenso, etc.)
chave.idstringUUID da chave
chave.nomestringNome atribuído à chave
chave.created_atstringData de criação (ISO 8601)

Exemplos

curl -X POST "https://declara-web.vercel.app/api/v1/auth/validate" \
  -H "Content-Type: application/json" \
  -d '{
    "email":  "empresa@email.com",
    "apiKey": "sk_declara_a1b2c3d4..."
  }'
const res = await fetch('https://declara-web.vercel.app/api/v1/auth/validate', {
  method:  'POST',
  headers: { 'Content-Type': 'application/json' },
  body:    JSON.stringify({
    email:  'empresa@email.com',
    apiKey: 'sk_declara_a1b2c3d4...',
  }),
});
const data = await res.json();
// data.valid === true → credenciais OK
import requests

r = requests.post(
    'https://declara-web.vercel.app/api/v1/auth/validate',
    json={'email': 'empresa@email.com', 'apiKey': 'sk_declara_a1b2c3d4...'}
)
data = r.json()

Resposta de Sucesso (200)

JSON
{
  "valid": true,
  "empresa": {
    "id":           "550e8400-e29b-41d4-a716-446655440000",
    "razao_social": "EMPRESA EXEMPLO LTDA",
    "cnpj":         "00.000.000/0001-00",
    "email":        "empresa@email.com",
    "status":       "ativo"
  },
  "chave": {
    "id":         "c56a4180-65aa-42ec-a945-5fd21dec0538",
    "nome":       "HS Financeiro",
    "created_at": "2026-07-02T10:00:00.000Z"
  }
}

Credenciais Inválidas (401)

JSON
{ "valid": false, "error": "Chave inválida ou inativa." }
{ "valid": false, "error": "E-mail não corresponde à chave informada." }