Docs/Autenticación

Autenticación

La API se autentica con una clave de API del equipo enviada como token de portador (bearer token). Cada clave está limitada a un solo equipo y un solo entorno.

Claves de API

Genera claves en Equipos → Claves de API. Una clave se muestra completa una sola vez — solo se guarda un hash SHA-256 de nuestro lado. Envíala como token de portador en el encabezado que se muestra a continuación:

curl https://api.seeitlive.io/v1/sessions \
  -H "Authorization: Bearer sil_live_xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx"

Entornos

Cada clave pertenece a uno de dos entornos, identificado por su prefijo:

PrefijoEntornoUso
sil_live_ProducciónSesiones reales de clientes.
sil_test_SandboxDesarrollo y pruebas.

Las sesiones creadas con una clave heredan el entorno y el equipo de esa clave.

Proteger una clave

Cada clave se puede restringir para que una clave filtrada resulte inútil desde el lugar equivocado:

  • Fuentes permitidas Restringe una clave por IP, rango CIDR o nombre de host — uno por línea. Los nombres de host se resuelven por DNS y se comparan con la IP de quien llama. Añade una etiqueta en línea después de # o ;, por ejemplo 1.2.3.4/24 # servidor 1.
  • ExpiraciónAsigna a una clave una fecha de expiración. Una vez pasada, las solicitudes que usen esa clave se rechazan.
  • RevocarDesactiva una clave al instante — las solicitudes en curso empiezan a fallar de inmediato.
Rota de inmediato las claves filtradas
Si una clave queda expuesta, revócala y restringe su reemplazo con una lista de fuentes permitidas antes de volver a distribuirla.

Firma de solicitudes

La firma es opcional y se suma a la autenticación por clave — el encabezado Authorization: Bearer sigue siendo obligatorio en cada solicitud. Actívala, rótala o desactívala para una clave desde Equipo → Claves de API → la clave → Seguridad; activarla o rotarla revela el secreto de firma una sola vez, así que guárdalo de inmediato.

Una vez activada, firma cada solicitud calculando HMAC_SHA256(signingSecret, "TIMESTAMP.METHOD.PATH.sha256hex(body)"), codificado en hexadecimal, donde:

VariableDescripción
TIMESTAMPLa marca de tiempo unix en segundos — el mismo valor enviado en el encabezado X-SeeItLive-Timestamp.
METHODEl método HTTP, en mayúsculas (por ejemplo, POST).
PATHLa ruta de la solicitud relativa a la raíz de versión de la API — lo que añades a la URL base, por ejemplo /sessions o /keys?teamId=x. No la URL completa, y sin el prefijo /api/v1. Incluye la cadena de consulta.
sha256hex(body)SHA-256 en hexadecimal minúsculas de los bytes exactos del cuerpo de la solicitud; el hash de una cadena vacía cuando no hay cuerpo.

Envía la firma y la marca de tiempo como encabezados en cada solicitud firmada:

EncabezadoValor
X-SeeItLive-Signaturesha256= seguido de la firma codificada en hexadecimal.
X-SeeItLive-TimestampLa misma marca de tiempo unix (en segundos) usada en la firma.
SIGNING_SECRET=your-signing-secret   # shown once when you enable signing
TS=$(date +%s)
BODY='{"channel":"demo"}'
BODY_HASH=$(printf '%s' "$BODY" | openssl dgst -sha256 | sed 's/^.* //')
SIG=$(printf '%s' "$TS.POST./sessions.$BODY_HASH" | openssl dgst -sha256 -hmac "$SIGNING_SECRET" | sed 's/^.* //')
curl https://api.seeitlive.io/v1/sessions \
  -H "Authorization: Bearer sil_live_xxxxxxxx" \
  -H "X-SeeItLive-Timestamp: $TS" \
  -H "X-SeeItLive-Signature: sha256=$SIG" \
  -H "Content-Type: application/json" \
  -d "$BODY"
Ventana anti-repetición de 300 segundos
Las solicitudes se rechazan si la marca de tiempo se aleja más de 300 segundos del reloj del servidor, o si la firma no coincide.

Límites de solicitudes

La API permite 100 solicitudes por minuto por clave. Los endpoints de creación de sesión y de entrega de invitaciones tienen límites más estrictos. Superar un límite devuelve 429 — consulta la referencia de errores completa para conocer todos los códigos de estado que puede devolver la API.

EstadoSignificado
401Clave ausente o inválida.
403Clave no permitida desde esta IP u origen, o falta el permiso necesario.
402Límite del plan alcanzado (sesiones, asientos) — se requiere una mejora de plan.
400Error de validación.
429Límite de solicitudes superado.
Autenticación