Autenticación
Todos los endpoints de la API pública (/api/v1/*) requieren un token Bearer creado desde la interfaz de Settings de QA Hub.
Crear un token de API
- Ve a Settings → Developer → API Tokens.
- Haz clic en Create token.
- Dale un nombre (p. ej., "CI pipeline") y selecciona los scopes que necesitas.
- Copia el token — se muestra solo una vez. Guárdalo en un gestor de secretos o en una variable de entorno de CI.
Los tokens tienen el formato qh_<prefix>_<secret>. El prefijo se almacena en texto claro para mostrarlo; el secreto se hashea con bcrypt y no puede recuperarse de nuevo.
Scopes
| Scope | Acceso |
|---|---|
read | Endpoints GET — listar proyectos, casos, ejecuciones, resultados |
write | Endpoints POST, PATCH, DELETE — crear y modificar recursos |
Asigna solo los scopes que un token necesita. Los pipelines de CI que solo ingestan resultados necesitan write. Las herramientas de reporting que solo leen métricas necesitan read.
Hacer solicitudes
Añade el token a cada solicitud en el header Authorization:
Authorization: Bearer qh_abc123_your-secret-here
Ejemplo con cURL
curl https://your-qahub.com/api/v1/projects \
-H "Authorization: Bearer qh_abc123_yoursecret"
JavaScript (fetch)
const res = await fetch('https://your-qahub.com/api/v1/projects', {
headers: {
'Authorization': 'Bearer qh_abc123_yoursecret',
'Content-Type': 'application/json',
},
});
const { data } = await res.json();
Verificar un token
Usa el endpoint /api/v1/me para confirmar que un token es válido e inspeccionar sus scopes:
curl https://your-qahub.com/api/v1/me \
-H "Authorization: Bearer qh_abc123_yoursecret"
{
"tenant": { "id": "cuid123", "name": "Acme Corp", "status": "ACTIVE" },
"scopes": ["read", "write"],
"ai": { "provider": "gemini", "model": "gemini-2.0-flash", "quota_exhausted": false }
}
Alcance del token
Los tokens tienen alcance de tenant — un token creado por un usuario en el espacio de trabajo de Acme Corp solo puede acceder a los datos de Acme Corp. No hay acceso entre tenants mediante tokens.
Revocar un token
Ve a Settings → Developer → API Tokens, localiza el token por su nombre/prefijo y haz clic en Revoke. El token deja de funcionar de inmediato.
Respuestas de error
| Estado | Significado |
|---|---|
401 Unauthorized | Token ausente o mal formado |
401 Unauthorized | Token no encontrado o revocado |
403 Forbidden | El token no tiene el scope requerido |