API Reference
This document provides a comprehensive reference for the Qalá API, detailing the available endpoints and functionality for secure secret management.
Base URL
All API requests should be made to: https://api.qala-security.com
Authentication
Qalá API uses JWT token-based authentication. You can authenticate using either:
Login with Email and Password
POST /auth/loginRequest Body:
{
"email": "user@example.com",
"password": "your-password"
}Response:
{
"token": "your-jwt-token"
}Login with API Key
POST /auth/tokenRequest Body:
{
"apiKey": "your-api-key"
}Response:
{
"token": "your-jwt-token"
}Once authenticated, include the JWT token in the Authorization header for all subsequent requests:
Authorization: Bearer your-jwt-tokenUser Endpoints
Get User Profile
GET /user/profileResponse:
{
"id": "user-id",
"email": "user-email",
"name": "user-name",
"projects": [
{
"id": "project-id",
"name": "project-name"
}
]
}Project Endpoints
List Projects
GET /projectsResponse:
[
{
"id": "project-id",
"name": "project-name",
"description": "project-description"
}
]Create Project
POST /projectsRequest Body:
{
"name": "project-name",
"description": "project-description"
}Response:
{
"id": "project-id",
"name": "project-name",
"description": "project-description"
}Get Project Details
GET /projects/:projectIdResponse:
{
"id": "project-id",
"name": "project-name",
"description": "project-description",
"createdAt": "timestamp"
}Environment Endpoints
List Environments
GET /projects/:projectId/environmentsResponse:
[
{
"name": "environment-name"
}
]Create Environment
POST /projects/:projectId/environmentsRequest Body:
{
"name": "environment-name"
}Response:
{
"name": "environment-name"
}Secret Management Endpoints
List Secrets
GET /projects/:projectId/environments/:environment/secretsResponse:
[
{
"name": "secret-name",
"description": "secret-description",
"updatedAt": "timestamp"
}
]Get Secret
GET /projects/:projectId/environments/:environment/secrets/:secretNameResponse:
{
"name": "secret-name",
"value": "secret-value",
"description": "secret-description",
"updatedAt": "timestamp"
}Create or Update Secret
PUT /projects/:projectId/environments/:environment/secrets/:secretNameRequest Body:
{
"value": "secret-value",
"description": "secret-description"
}Response:
{
"name": "secret-name",
"description": "secret-description",
"updatedAt": "timestamp"
}Delete Secret
DELETE /projects/:projectId/environments/:environment/secrets/:secretNameResponse:
204 No ContentRotate Secret
POST /projects/:projectId/environments/:environment/secrets/:secretName/rotateResponse:
{
"name": "secret-name",
"description": "secret-description",
"updatedAt": "timestamp"
}Logging
Log Secret Access
POST /projects/:projectId/logsRequest Body:
{
"environment": "environment-name",
"secretName": "secret-name",
"action": "read", // or "write", "delete", etc.
"timestamp": "ISO-timestamp"
}Response:
200 OKError Handling
The API returns standard HTTP status codes to indicate success or failure:
200 OK: Request was successful201 Created: Resource was successfully created204 No Content: Request succeeded with no response body400 Bad Request: Request was malformed or invalid401 Unauthorized: Authentication failed403 Forbidden: Authenticated user doesn't have permission404 Not Found: Requested resource not found500 Internal Server Error: Server encountered an error
Error responses include a message field:
{
"message": "Error description"
}Rate Limits
API requests are subject to rate limiting to ensure service stability. The current limits are:
- 100 requests per minute per IP address
- 1000 requests per hour per authenticated user
When a rate limit is exceeded, the API returns a 429 Too Many Requests status code.