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" }
}
| Campo | Obligatorio | Descripción |
|---|---|---|
sala | Sí | 1–64 caracteres [A-Za-z0-9._-]. |
identidad | Sí | Única por persona en la sala. Si se repite, se cierra la conexión anterior. |
nombre | No | Lo que ven los demás (hasta 128 caracteres). |
rol | No | anfitrion, participante (por defecto) u oyente. Ver roles. |
ttl_min | No | Vigencia del token en minutos; como máximo la del proyecto. |
metadata | No | Texto 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 ruta | Qué hace |
|---|---|
GET/v1/salas | Salas abiertas del proyecto. |
GET/v1/salas/{sala} | Detalle con participantes y sus pistas. |
GET/v1/salas/{sala}/historial | Conexiones 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 ruta | Qué devuelve |
|---|---|
GET/v1/uso?mes=2026-10 | Minutos-participante, salas, conexiones, minutos por día y últimas conexiones. |
GET/v1/proyecto | Lí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