Listar Claves de API
Obtiene todas las claves de API del usuario autenticado. Por defecto, solo se devuelven las claves activas.
Endpoint​
GET /api/v1/api-keys/
Autenticación​
Requiere token JWT (autenticación Bearer).
Parámetros de Query​
| Parámetro | Tipo | Requerido | Default | Descripción |
|---|---|---|---|---|
include_expired | boolean | No | false | Incluir claves expiradas (inactivas) en el response |
Response​
Response Exitoso (200 OK)​
{
"api_keys": [
{
"id": "550e8400-e29b-41d4-a716-446655440000",
"key_prefix": "sk_live_abc123",
"description": "Clave de API de producción",
"is_active": true,
"last_used_at": "2024-01-20T14:30:00Z",
"expires_at": null,
"created_at": "2024-01-15T10:30:00Z",
"updated_at": "2024-01-20T14:30:00Z"
},
{
"id": "660f9511-f3ac-52e5-b827-557766551111",
"key_prefix": "sk_live_def456",
"description": "Desarrollo y pruebas",
"is_active": true,
"last_used_at": null,
"expires_at": null,
"created_at": "2024-01-10T09:15:00Z",
"updated_at": "2024-01-10T09:15:00Z"
}
],
"total": 2
}
Campos del Response​
| Campo | Tipo | Descripción |
|---|---|---|
api_keys | array | Array de objetos de claves de API |
api_keys[].id | UUID | Identificador único de la clave de API |
api_keys[].key_prefix | string | Primeros 14 caracteres (para identificación) |
api_keys[].description | string | Descripción de la clave |
api_keys[].is_active | boolean | Si la clave está activa |
api_keys[].last_used_at | datetime | Cuándo se usó la clave por última vez (null si nunca se usó) |
api_keys[].expires_at | datetime | Fecha de expiración (null si no expira) |
api_keys[].created_at | datetime | Timestamp de creación |
api_keys[].updated_at | datetime | Timestamp de última actualización |
total | integer | Número total de claves devueltas |
Clave de API Completa No Incluida
La clave de API completa nunca es devuelta por este endpoint. Solo se muestra el key_prefix para propósitos de identificación.
Ejemplos​
# Obtener solo claves activascurl https://api.callcov.com/api/v1/api-keys/ \-H "Authorization: Bearer eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9..."
# Incluir claves expiradascurl "https://api.callcov.com/api/v1/api-keys/?include_expired=true" \-H "Authorization: Bearer eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9..."Casos de Uso​
Mostrar Claves de API en Dashboard​
async function loadAPIKeys() {
const response = await fetch('https://api.callcov.com/api/v1/api-keys/', {
headers: {
'Authorization': `Bearer ${accessToken}`
}
});
const { api_keys } = await response.json();
// Renderizar claves en UI
const keysList = document.getElementById('api-keys-list');
api_keys.forEach(key => {
const keyElement = document.createElement('div');
keyElement.className = 'api-key-item';
keyElement.innerHTML = `
<div class="key-prefix">${key.key_prefix}...</div>
<div class="key-description">${key.description || 'Sin descripción'}</div>
<div class="key-status">${key.is_active ? 'Activa' : 'Expirada'}</div>
<button onclick="expireKey('${key.id}')">Revocar</button>
`;
keysList.appendChild(keyElement);
});
}
Encontrar Claves Sin Usar​
def find_unused_keys(access_token):
"""Encontrar claves de API que nunca se han usado"""
headers = {"Authorization": f"Bearer {access_token}"}
response = requests.get(
"https://api.callcov.com/api/v1/api-keys/",
headers=headers
)
keys = response.json()['api_keys']
unused_keys = [k for k in keys if k['last_used_at'] is None]
print(f"Se encontraron {len(unused_keys)} claves sin usar:")
for key in unused_keys:
print(f" - {key['key_prefix']} - {key['description']}")
return unused_keys
Auditar Uso de Claves​
from datetime import datetime, timedelta
def audit_key_usage(access_token):
"""Encontrar claves no usadas en los últimos 30 dÃas"""
headers = {"Authorization": f"Bearer {access_token}"}
response = requests.get(
"https://api.callcov.com/api/v1/api-keys/?include_expired=true",
headers=headers
)
keys = response.json()['api_keys']
thirty_days_ago = datetime.now() - timedelta(days=30)
stale_keys = []
for key in keys:
if key['last_used_at']:
last_used = datetime.fromisoformat(key['last_used_at'].replace('Z', '+00:00'))
if last_used < thirty_days_ago:
stale_keys.append(key)
elif key['is_active']:
# Activa pero nunca usada
created = datetime.fromisoformat(key['created_at'].replace('Z', '+00:00'))
if created < thirty_days_ago:
stale_keys.append(key)
print(f"Se encontraron {len(stale_keys)} claves obsoletas (sin usar por 30+ dÃas):")
for key in stale_keys:
print(f" - {key['key_prefix']} - {key['description']}")
return stale_keys
Ordenamiento de Claves​
Las claves se devuelven en orden cronológico inverso (más nuevas primero) por fecha de creación.
LÃmites​
No hay paginación para este endpoint. Todas las claves (hasta 10 claves activas por usuario) se devuelven en un solo response.
Errores​
401 Unauthorized​
Token JWT inválido o faltante:
{
"detail": "No se pudieron validar las credenciales"
}
Seguridad​
- Claves completas nunca expuestas: Solo se muestra el prefijo
- Aislamiento de usuarios: Solo puedes ver tus propias claves
- Rastreo de uso:
last_used_atayuda a identificar claves activas vs. inactivas
Formato de Prefijo de Clave​
El campo key_prefix muestra los primeros 14 caracteres de tu clave de API:
sk_live_abc123...
Esto te permite:
- Identificar qué clave se está usando en los logs
- Relacionar claves con sus descripciones
- Mostrar claves de forma segura en UI (el prefijo no revela la clave completa)
Relacionado​
- Crear Clave de API - Generar nueva clave de API
- Eliminar Clave de API - Expirar una clave de API
- GuÃa de Autenticación - Usar claves de API