Saltar al contenido principal

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ámetroTipoRequeridoDefaultDescripción
include_expiredbooleanNofalseIncluir 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​

CampoTipoDescripción
api_keysarrayArray de objetos de claves de API
api_keys[].idUUIDIdentificador único de la clave de API
api_keys[].key_prefixstringPrimeros 14 caracteres (para identificación)
api_keys[].descriptionstringDescripción de la clave
api_keys[].is_activebooleanSi la clave está activa
api_keys[].last_used_atdatetimeCuándo se usó la clave por última vez (null si nunca se usó)
api_keys[].expires_atdatetimeFecha de expiración (null si no expira)
api_keys[].created_atdatetimeTimestamp de creación
api_keys[].updated_atdatetimeTimestamp de última actualización
totalintegerNú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 activas
curl https://api.callcov.com/api/v1/api-keys/ \
-H "Authorization: Bearer eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9..."
# Incluir claves expiradas
curl "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_at ayuda 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​