7.7 KiB
7.7 KiB
API Reference - Aggios Backend
Base URL
- Development:
http://localhost:8080 - Production:
https://api.aggios.appouhttps://{subdomain}.aggios.app
Authentication
Todos os endpoints protegidos requerem header:
Authorization: Bearer {access_token}
Endpoints
🔐 Autenticação
Login
POST /api/auth/login
Content-Type: application/json
{
"email": "user@example.com",
"password": "Senha123!@#"
}
Response 200:
{
"access_token": "eyJhbGciOiJIUzI1NiIs...",
"refresh_token": "aB_c123xYz...",
"token_type": "Bearer",
"expires_in": 86400
}
Register
POST /api/auth/register
Content-Type: application/json
{
"email": "newuser@example.com",
"password": "Senha123!@#",
"confirm_password": "Senha123!@#",
"first_name": "João",
"last_name": "Silva"
}
Response 201:
{
"data": {
"id": "123e4567-e89b-12d3-a456-426614174000",
"email": "newuser@example.com",
"first_name": "João",
"last_name": "Silva",
"created_at": "2024-12-05T10:00:00Z"
},
"message": "Usuário registrado com sucesso",
"code": 201,
"timestamp": 1733376000
}
Refresh Token
POST /api/auth/refresh
Content-Type: application/json
{
"refresh_token": "aB_c123xYz..."
}
Response 200:
{
"data": {
"access_token": "eyJhbGciOiJIUzI1NiIs...",
"token_type": "Bearer",
"expires_in": 86400
},
"message": "Token renovado com sucesso",
"code": 200,
"timestamp": 1733376000
}
Logout
POST /api/logout
Authorization: Bearer {access_token}
Response 200:
{
"data": null,
"message": "Logout realizado com sucesso",
"code": 200,
"timestamp": 1733376000
}
👤 Usuário
Get Profil
GET /api/users/me
Authorization: Bearer {access_token}
Response 200:
{
"data": {
"id": "123e4567-e89b-12d3-a456-426614174000",
"email": "user@example.com",
"first_name": "João",
"last_name": "Silva",
"tenant_id": "tenant-123",
"is_active": true,
"created_at": "2024-12-05T10:00:00Z",
"updated_at": "2024-12-05T10:00:00Z"
},
"message": "Usuário obtido com sucesso",
"code": 200,
"timestamp": 1733376000
}
Update Perfil
PUT /api/users/me
Authorization: Bearer {access_token}
Content-Type: application/json
{
"first_name": "João",
"last_name": "Silva",
"email": "newemail@example.com"
}
Response 200:
{
"data": {
"id": "123e4567-e89b-12d3-a456-426614174000",
"email": "newemail@example.com",
"first_name": "João",
"last_name": "Silva",
"updated_at": "2024-12-05T11:00:00Z"
},
"message": "Usuário atualizado com sucesso",
"code": 200,
"timestamp": 1733376000
}
Change Password
POST /api/users/me/change-password
Authorization: Bearer {access_token}
Content-Type: application/json
{
"current_password": "SenhaAtual123!@#",
"new_password": "NovaSenha456!@#",
"confirm_password": "NovaSenha456!@#"
}
Response 200:
{
"data": null,
"message": "Senha alterada com sucesso",
"code": 200,
"timestamp": 1733376000
}
🏢 Tenant
Get Tenant
GET /api/tenant
Authorization: Bearer {access_token}
Response 200:
{
"data": {
"id": "tenant-123",
"name": "Acme Corp",
"domain": "acme.aggios.app",
"subdomain": "acme",
"is_active": true,
"created_at": "2024-12-05T10:00:00Z",
"updated_at": "2024-12-05T10:00:00Z"
},
"message": "Tenant obtido com sucesso",
"code": 200,
"timestamp": 1733376000
}
Update Tenant
PUT /api/tenant
Authorization: Bearer {access_token}
Content-Type: application/json
{
"name": "Acme Corporation",
"domain": "acmecorp.aggios.app"
}
Response 200:
{
"data": {
"id": "tenant-123",
"name": "Acme Corporation",
"domain": "acmecorp.aggios.app"
},
"message": "Tenant atualizado com sucesso",
"code": 200,
"timestamp": 1733376000
}
📁 Files (MinIO)
Upload File
POST /api/files/upload
Authorization: Bearer {access_token}
Content-Type: multipart/form-data
Form Data:
- file: (binary)
- folder: "agencias" (opcional)
Response 201:
{
"data": {
"id": "file-123",
"name": "documento.pdf",
"url": "https://minio.aggios.app/aggios/file-123",
"size": 1024,
"mime_type": "application/pdf",
"created_at": "2024-12-05T10:00:00Z"
},
"message": "Arquivo enviado com sucesso",
"code": 201,
"timestamp": 1733376000
}
Delete File
DELETE /api/files/{file_id}
Authorization: Bearer {access_token}
Response 200:
{
"data": null,
"message": "Arquivo deletado com sucesso",
"code": 200,
"timestamp": 1733376000
}
❤️ Health
Health Check
GET /api/health
Response 200:
{
"status": "up",
"timestamp": 1733376000,
"checks": {
"database": true,
"redis": true,
"minio": true
}
}
Error Responses
400 Bad Request
{
"error": "validation_error",
"message": "Validação falhou",
"code": 400,
"timestamp": 1733376000,
"path": "/api/auth/login",
"errors": [
{
"field": "email",
"message": "Email inválido"
}
]
}
401 Unauthorized
{
"error": "unauthorized",
"message": "Token expirado ou inválido",
"code": 401,
"timestamp": 1733376000,
"path": "/api/users/me"
}
403 Forbidden
{
"error": "forbidden",
"message": "Acesso negado",
"code": 403,
"timestamp": 1733376000,
"path": "/api/tenant"
}
404 Not Found
{
"error": "not_found",
"message": "Recurso não encontrado",
"code": 404,
"timestamp": 1733376000,
"path": "/api/users/invalid-id"
}
429 Too Many Requests
{
"error": "rate_limited",
"message": "Muitas requisições. Tente novamente mais tarde",
"code": 429,
"timestamp": 1733376000,
"path": "/api/auth/login"
}
500 Internal Server Error
{
"error": "internal_server_error",
"message": "Erro interno do servidor",
"code": 500,
"timestamp": 1733376000,
"path": "/api/users/me",
"trace_id": "abc123"
}
HTTP Status Codes
| Código | Significado |
|---|---|
| 200 | OK - Requisição bem-sucedida |
| 201 | Created - Recurso criado |
| 204 | No Content - Sucesso sem corpo |
| 400 | Bad Request - Erro na requisição |
| 401 | Unauthorized - Autenticação necessária |
| 403 | Forbidden - Acesso negado |
| 404 | Not Found - Recurso não encontrado |
| 409 | Conflict - Conflito (ex: email duplicado) |
| 422 | Unprocessable Entity - Erro de validação |
| 429 | Too Many Requests - Rate limit |
| 500 | Internal Server Error - Erro do servidor |
| 503 | Service Unavailable - Serviço indisponível |
Rate Limiting
- Limite: 100 requisições por minuto (global)
- Burst: até 200 requisições em picos
- Headers de Resposta:
X-RateLimit-Limit: limite totalX-RateLimit-Remaining: requisições restantesX-RateLimit-Reset: timestamp do reset
CORS
Origens permitidas (configuráveis):
http://localhost:3000http://localhost:3001https://aggios.apphttps://dash.aggios.app
Versionamento da API
- Versão Atual: v1
- URL Pattern:
/api/v1/* - Compatibilidade para versões antigas mantidas por 1 ano
Request/Response Format
Todos os endpoints usam:
- Content-Type:
application/json - Accept:
application/json - Charset:
utf-8
Exemplo de request:
curl -X POST https://api.aggios.app/api/auth/login \
-H "Content-Type: application/json" \
-H "Accept: application/json" \
-d '{"email":"user@example.com","password":"Senha123!@#"}'
Documentação Interativa
Swagger/OpenAPI (quando implementado):
https://api.aggios.app/docs
WebSocket (Futuro)
Suporte para:
- Real-time notifications
- Live chat/messaging
- Activity streaming
Endpoint: wss://api.aggios.app/ws
Última atualização: Dezembro 2025 Versão da API: 1.0.0