Rimasun Docs

API REST v1

Todo en JSON y en español. Úsela solo desde su servidor.

Base: https://SU-RIMASUN/v1 (en desarrollo, http://localhost:7890/v1). Estado del servicio: GET /salud → { "ok": true, "servicio": "rimasun", "version": "…" }.

Autenticación

Cada solicitud lleva la llave y su secreto con Basic:

Authorization: Basic base64(rk_…:rs_…)

También se aceptan las cabeceras X-Rimasun-Llave y X-Rimasun-Secreto. Límite: 120 solicitudes por minuto por llave (si se pasa, 429).

La API exige el secreto rs_…: nunca la llame desde el navegador ni desde una app.

Errores

Siempre con el mismo formato y un estado HTTP 400/401/403/404/429/503:

{ "error": "limite_minutos", "mensaje": "Se alcanzó el límite de minutos del mes" }

Use error en su código y muestre mensaje a la persona. Lista completa en Errores y límites.

POST/v1/tokens

Emite el token para que una persona entre a una sala. Si la sala no existe, la crea con los límites del proyecto.

{
  "sala": "cita-250",
  "identidad": "medico-41",
  "nombre": "Dr(a). Ruiz",
  "rol": "anfitrion",
  "ttl_min": 60,
  "metadata": { "cita": "250" }
}
CampoObligatorioDescripción
salaSí1–64 caracteres [A-Za-z0-9._-].
identidadSíÚnica por persona en la sala. Si se repite, se cierra la conexión anterior.
nombreNoLo que ven los demás (hasta 128 caracteres).
rolNoanfitrion, participante (por defecto) u oyente. Ver roles.
ttl_minNoVigencia del token en minutos; como máximo la del proyecto.
metadataNoTexto u objeto (hasta 2 000 caracteres) que viaja con el participante. No ponga datos sensibles.

Respuesta 201:

{
  "token": "eyJ…", "url": "wss://medios.ejemplo.com", "sala": "cita-250",
  "identidad": "medico-41", "rol": "anfitrion", "expira": 1792455517,
  "calidad": { "perfil": "720p", "ancho": 1280, "alto": 720, "fps": 24, "bitrate_max_kbps": 1700,
               "codec": "vp8", "simulcast": true, "adaptativo": true, "pantalla": false, "audio_kbps": 32 },
  "limites": { "duracion_max_min": 60, "participantes_sala": 2 }
}

Entregue esta respuesta tal cual al SDK: Rimasun.pantalla({ credencial: respuesta }) en web o RimasunCredencial.desdeJson(respuesta) en Flutter.

curl -X POST https://SU-RIMASUN/v1/tokens -u "$RIMASUN_LLAVE:$RIMASUN_SECRETO" \
  -H "Content-Type: application/json" \
  -d '{"sala":"cita-250","identidad":"paciente-174","nombre":"Ana","ttl_min":30}'
const r = await fetch(process.env.RIMASUN_URL + "/v1/tokens", {
  method: "POST",
  headers: {
    "Content-Type": "application/json",
    Authorization: "Basic " + Buffer.from(process.env.RIMASUN_LLAVE + ":" + process.env.RIMASUN_SECRETO).toString("base64"),
  },
  body: JSON.stringify({ sala: "cita-250", identidad: "paciente-174", nombre: "Ana", ttl_min: 30 }),
});
const credencial = await r.json();   // si !r.ok: credencial.error y credencial.mensaje
$ch = curl_init(getenv('RIMASUN_URL') . '/v1/tokens');
curl_setopt_array($ch, [
  CURLOPT_POST => true, CURLOPT_RETURNTRANSFER => true, CURLOPT_TIMEOUT => 10,
  CURLOPT_USERPWD => getenv('RIMASUN_LLAVE') . ':' . getenv('RIMASUN_SECRETO'),
  CURLOPT_HTTPHEADER => ['Content-Type: application/json'],
  CURLOPT_POSTFIELDS => json_encode(['sala' => 'cita-250', 'identidad' => 'paciente-174', 'nombre' => 'Ana', 'ttl_min' => 30]),
]);
$credencial = json_decode(curl_exec($ch), true);
import base64, json, os, urllib.request
auth = base64.b64encode(f"{os.environ['RIMASUN_LLAVE']}:{os.environ['RIMASUN_SECRETO']}".encode()).decode()
pedido = urllib.request.Request(os.environ["RIMASUN_URL"] + "/v1/tokens", method="POST",
    data=json.dumps({"sala": "cita-250", "identidad": "paciente-174", "nombre": "Ana", "ttl_min": 30}).encode(),
    headers={"Content-Type": "application/json", "Authorization": "Basic " + auth})
credencial = json.load(urllib.request.urlopen(pedido, timeout=10))

Versiones completas con manejo de errores en el paquete Ejemplos de servidor (Mi cuenta → Descargas).

Salas

Método y rutaQué hace
GET/v1/salasSalas abiertas del proyecto.
GET/v1/salas/{sala}Detalle con participantes y sus pistas.
GET/v1/salas/{sala}/historialConexiones pasadas de la sala (quién, cuándo, cuánto).
DELETE/v1/salas/{sala}Cierra la sala y desconecta a todos.
POST/v1/salas/{sala}/expulsar{ "identidad": "…" } retira a un participante.

Uso y proyecto

Método y rutaQué devuelve
GET/v1/uso?mes=2026-10Minutos-participante, salas, conexiones, minutos por día y últimas conexiones.
GET/v1/proyectoLímites, calidad y minutos usados en el mes.

Webhooks

Los eventos de sala y participantes se envían a la URL que configure. Ver Webhooks.

Rimasun · documentación en español · cambios por versión