Saltar al contenido principal

Crear Clave de API

Crea una nueva clave de API para acceso programático a la API de CallCov. La clave completa solo se muestra una vez durante la creación y no puede recuperarse después.

Endpoint​

POST /api/v1/api-keys/

Autenticación​

Requiere token JWT (autenticación Bearer).

Solo JWT

Las claves de API solo pueden crearse usando autenticación JWT. No puedes crear una clave de API usando otra clave de API.

Request​

Content-Type​

application/json

Request Body​

CampoTipoRequeridoDescripción
descriptionstringNoDescripción de para qué es esta clave (máx 500 caracteres)

Ejemplo de Request​

{
"description": "Clave de API de producción para integración de análisis de llamadas"
}

Response​

Response Exitoso (201 Created)​

{
"id": "550e8400-e29b-41d4-a716-446655440000",
"api_key": "sk_live_abc123def456ghi789jkl012mno345pqr678stu901vwx234yz",
"key_prefix": "sk_live_abc123",
"description": "Clave de API de producción para integración de análisis de llamadas",
"created_at": "2024-01-15T10:30:00Z"
}
¡Guarda tu Clave de API!

El valor de api_key solo se muestra una vez. Guárdalo inmediatamente en un lugar seguro. No vas a poder recuperarlo de nuevo.

Campos del Response​

CampoTipoDescripción
idUUIDIdentificador único de la clave de API
api_keystringClave de API completa (¡se muestra solo una vez!)
key_prefixstringPrimeros 14 caracteres de la clave (para identificación)
descriptionstringTu descripción
created_atdatetimeTimestamp de creación (ISO 8601)

Formato de Clave de API​

Las claves de API siguen el formato: sk_{entorno}_{cadena_aleatoria}

  • sk = Secret Key (Clave Secreta)
  • live = Entorno de producción
  • test = Entorno de prueba (aún no implementado)
  • Cadena aleatoria = 48 caracteres

Ejemplo: sk_live_abc123def456ghi789jkl012mno345pqr678stu901vwx234yz

Límites​

  • Máximo 10 claves de API activas por usuario
  • Para crear más, primero tienes que expirar las claves que no usas

Ejemplos​

curl -X POST https://api.callcov.com/api/v1/api-keys/ \
-H "Authorization: Bearer eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9..." \
-H "Content-Type: application/json" \
-d '{
"description": "Clave de API de producción"
}'

Usando tu Clave de API​

Después de crear una clave de API, usala para autenticación de API:

# En lugar del token JWT
curl https://api.callcov.com/api/v1/analysis/ \
-H "X-API-Key: sk_live_abc123def456..."

Errores​

400 Bad Request​

Se alcanzó el máximo de claves de API:

{
"detail": "Se alcanzó el número máximo de claves de API (10). Por favor expirar las claves sin usar."
}

401 Unauthorized​

Token JWT inválido o faltante:

{
"detail": "No se pudieron validar las credenciales"
}

Mejores Prácticas de Seguridad​

✅ HACER​

  • Guardar inmediatamente: Copia la clave a un administrador de contraseñas seguro
  • Usar variables de entorno: Almacenar en archivos .env (¡nunca hacer commit!)
  • Rotar regularmente: Crear nuevas claves periódicamente y expirar las viejas
  • Usar nombres descriptivos: Ayuda a identificar qué integración usa qué clave
  • Claves separadas por entorno: Claves diferentes para desarrollo, staging, producción

❌ NO HACER​

  • Nunca hacer commit a Git: Claves de API en código = brecha de seguridad
  • Nunca compartir públicamente: No pegar en Slack, Discord, foros
  • Nunca loguear en texto plano: Redactar claves en logs de aplicación
  • Nunca embeber en código del cliente: Solo usar en backend/servidor

Ejemplo: Almacenamiento Seguro​

Variable de Entorno (archivo .env)​

# .env (¡agregar a .gitignore!)
CALLCOV_API_KEY=sk_live_abc123def456...
import os
from dotenv import load_dotenv

load_dotenv()
api_key = os.getenv('CALLCOV_API_KEY')

AWS Secrets Manager​

import boto3
import json

def get_api_key():
client = boto3.client('secretsmanager')
response = client.get_secret_value(SecretId='callcov/api-key')
return json.loads(response['SecretString'])['api_key']

api_key = get_api_key()

Organizando Múltiples Claves​

Crea diferentes claves para diferentes propósitos:

# Desarrollo
description="Desarrollo - Pruebas Locales"

# Staging
description="Staging - Ambiente de QA"

# Producción
description="Producción - Aplicación Principal"

# CI/CD
description="CI/CD - Tests Automatizados"

Esto facilita:

  • Identificar qué clave se está usando
  • Expirar claves comprometidas sin afectar otras
  • Rastrear uso por entorno

Qué Sucede Después de la Creación​

  1. Clave completa devuelta: Guárdala inmediatamente
  2. Clave es hasheada: Solo el hash se almacena en la base de datos
  3. Prefijo guardado: Usado para identificación en la lista de claves
  4. Clave está activa: Puede usarse inmediatamente para requests de API

Ciclo de Vida de la Clave​

Crear Clave → Usar para llamadas de API → Monitorear uso → Expirar cuando ya no se necesite

Relacionado​