# Autenticacao

> O servico de autenticacao PrismaData gerencia credenciais, tokens JWT e API Keys para acesso as APIs de dados PrismaData.

**Base**: `https://api.prismadata.io/v1`

**Autenticação**: header `X-Apikey` (ou query `api_key`). Detalhes em [Autenticação](autenticacao.md).

**Formato de resposta**: JSON plano com campos `prismadata__<serviço>__<campo>`; em lote, dicionário indexado pelas chaves enviadas. Detalhes em [Formato de Resposta](guias/formato-de-resposta.md).

## Endpoints

### `POST /auth/token`

Autentica via usuario/senha ou API Key e retorna um token JWT assinado com RS256. O token e retornado no body e tambem em um cookie httpOnly para uso em browsers. **Login com API Key (recomendado):** envie no campo `api_key`. A API Key nao expira e o gateway gerencia o token automaticamente, sem necessidade de controle de validade pelo cliente. ``` curl -X POST .../token -d "api_key=ak_xxxxxxxx" ``` **Login com senha:** envie `username` e `password` como form-urlencoded. O token JWT retornado possui expiracao (claim `exp`) e o cliente deve controlar sua validade, renovando-o antes da expiracao. ``` curl -X POST .../token -d "username=user&password=pass" ```

**Exemplo curl**:

```bash
curl -X POST "https://api.prismadata.io/v1/auth/token" \
  -H "X-Apikey: SEU_TOKEN"
```

**Response 200** (`application/json`):

> Successful Response

| Campo | Tipo | Obrigatório | Descrição |
|-------|------|-------------|-----------|
| `access_token` | string | sim | Token JWT assinado com RS256. |
| `token_type` | string | não | Tipo do token (sempre 'bearer'). |

**Outros códigos**: 401, 422, 429

---

### `GET /auth/me`

Retorna os dados do usuario autenticado extraidos do token JWT. O token e obtido do cookie httpOnly ou do header `Authorization: Bearer <token>`.

**Exemplo curl**:

```bash
curl -X GET "https://api.prismadata.io/v1/auth/me" \
  -H "X-Apikey: SEU_TOKEN"
```

**Response 200** (`application/json`):

> Successful Response

| Campo | Tipo | Obrigatório | Descrição |
|-------|------|-------------|-----------|
| `username` | string | sim | Username do usuario autenticado. |
| `roles` | array[string] | não | Lista de roles atribuidos ao usuario. |
| `tenant_id` | integer \| null | não | ID do tenant ao qual o usuario pertence. |
| `tenant_cnpj` | string \| null | não | CNPJ formatado do tenant ao qual o usuario pertence. Nulo quando o usuario nao esta vinculado a um tenant. |
| `tenant_razao_social` | string \| null | não | Razao social do tenant ao qual o usuario pertence. Nulo quando o usuario nao esta vinculado a um tenant. |
| `sandbox` | boolean | não | Indica se o usuario opera em modo sandbox (dados sinteticos). |
| `rate_limit` | number \| null | não | Limite de requisicoes por minuto do usuario. |

**Outros códigos**: 401, 403, 429

---

### `POST /auth/users/change_password`

Altera a senha do usuario autenticado. Requer autenticacao via username/password no body. A nova senha deve ter entre 15 e 30 caracteres. Rate limit: 5 requisicoes por minuto.

**Exemplo curl**:

```bash
curl -X POST "https://api.prismadata.io/v1/auth/users/change_password?new_password=string" \
  -H "X-Apikey: SEU_TOKEN" \
  -H "Content-Type: application/json" \
  -d '{
         "username": "usuario",
         "password": "SenhaSegura!23"
       }'
```

**Parâmetros**:

| Nome | Local | Tipo | Obrigatório | Descrição |
|------|-------|------|-------------|-----------|
| `new_password` | query | string | sim |  |

**Request body** (`application/json`):

| Campo | Tipo | Obrigatório | Descrição |
|-------|------|-------------|-----------|
| `username` | string | sim |  |
| `password` | string | sim |  |

**Response 200** (`application/json`):

> Successful Response

Tipo: `object`.

**Outros códigos**: 422, 429

---

## Recursos relacionados

- Documentação Redoc interativa: https://prismadata.io/redoc.html#tag/Autenticacao
- OpenAPI só deste produto (JSON): https://prismadata.io/llm/openapi/autenticacao.json
- OpenAPI completo: https://prismadata.io/openapi.yaml
- Índice geral: https://prismadata.io/llms.txt
